Repository OOM Audit
Purpose
Finds heap, native-memory, thread, file-descriptor, and retained-graph conditions
that can exhaust a process. Produces an evidence-backed report without confusing
lexical matches, plausible risks, and confirmed defects.
This is an audit method, not a pattern dump. Every tracked file receives a
screening disposition, every positive finding is traced through ownership and
cleanup, and important non-issues remain visible as coverage evidence.
Safety Invariants
- Record the exact commit before analysis.
- Keep the target repository read-only unless the user separately authorizes fixes.
- Do not commit, push, open issues, or create pull requests unless explicitly asked.
- Preserve unrelated work in dirty checkouts.
- Store generated inventories and reports outside the target when repository policy
forbids audit artifacts.
- Do not copy substantial source into reports; cite and paraphrase.
- Treat runtime profiling as optional and non-invasive. Never collect or expose
sensitive heap contents without explicit authorization.
Completion Standard
An audit is complete only when:
- the commit and repository state are recorded;
- every tracked file has a disposition or explicit assessment limitation;
- every taxonomy category has a coverage result, including zero-result categories;
- heap, requested-array, native/direct, thread-stack, metaspace/class-loader,
finalization/reference, and container/process memory domains are addressed;
- every candidate is classified as confirmed, plausible, or reviewed non-issue;
- every actionable finding has anchored evidence, severity, confidence, trigger,
retained-memory analysis, remediation, and test guidance;
- exclusions, unavailable sources, and runtime limitations are explicit; and
- inventory and report consistency checks pass.
Workflow
1. Freeze identity and constraints
Record:
git rev-parse HEAD
git status --short
git remote -v
git submodule status
Capture repository guardrails, generated/vendor policy, authorized output location,
build system, runtime versions, and whether source modifications are forbidden.
Line citations refer to this commit even if the working tree later changes.
2. Build the exhaustive inventory
Use Git as the scope authority:
git ls-files -z
Classify every path by:
- language and file type;
- production, test, tooling, generated, vendored, configuration, or binary;
- module/component;
- screening disposition; and
- limitation or exclusion reason.
Required dispositions:
| Disposition |
Meaning |
screened-no-candidate |
Taxonomy screening found no relevant construct |
candidate-traced |
One or more matches were manually traced |
reviewed-non-issue |
A bound, cleanup path, finite domain, or unreachable path was proven |
generated-boundary-reviewed |
Generated file was represented by its generator/parser boundary |
vendored-reviewed |
Vendored code was screened and ownership was recorded |
assessment-limited |
Access, format, size, tooling, or policy prevented assessment |
Do not silently exclude tests, tooling, generated files, or vendored code. They can
cause test-runner OOMs, ship into production, or reveal unsafe producer/consumer
contracts. Grouping is allowed only when each path remains present in the inventory.
Validate inventory completeness by comparing the sorted inventory path column with a
fresh git ls-files result. The symmetric difference must be empty.
3. Map memory ownership and input boundaries
Identify long-lived roots:
- process and class statics;
- application/session/request objects;
- event loops, UI trees, actors, and service containers;
- executor workers, timers, and thread locals;
- native handles and callback registries;
- class loaders, plugins, reflection metadata, and generated-code caches.
Identify growth inputs:
- user files, uploads, clipboard, drag-and-drop, and command arguments;
- network responses, sockets, messages, subprocess output, and logs;
- archive entries, serialized graphs, parser nodes, media dimensions, and metadata;
- internal event rates, edit histories, retries, and concurrent task submission.
Trace: source -> allocation/growth -> owner -> retention root -> cleanup/bound -> concurrency multiplier.
4. Screen the complete taxonomy
Use language-aware semantic/code-intelligence tools first, then repository search.
Search terms are candidate generators, never proof.
| Category |
Required questions |
| Collections and graphs |
Can lists, maps, sets, trees, registries, indexes, pools, dedup tables, or parent/child graphs grow for process/session lifetime? |
| Queues and backpressure |
Are queues bounded? What happens when producers outpace consumers or consumers block? Are retry/dead-letter queues bounded? |
| Caches |
Is cardinality finite? Are size/weight, TTL, eviction, weak references, invalidation, and class-loader lifecycles correct? |
| Listeners and callbacks |
Does every registration have an owner and removal path? Can repeated activation register duplicates? Do publishers outlive subscribers? |
| Histories and logs |
Are undo, audit, telemetry, diagnostics, console capture, event journals, snapshots, and recent-value lists bounded by count and weight? |
| Executors and threads |
Are pools/queues bounded and shut down? Can platform threads, scheduled tasks, futures, timers, subprocess drainers, or per-request executors accumulate? |
| Thread locals |
Are values removed on pooled threads? Can values retain requests, class loaders, buffers, security context, or graphs? |
| Metaspace and code generation |
Can class loaders, generated classes, proxies, scripts, plugins, hot reload, reflection metadata, or compiler outputs accumulate? Are unload boundaries real and observable? |
| Finalization and references |
Can finalizers, cleaners, phantom/reference queues, or deferred native cleanup fall behind allocation? Are reference-processing threads starved? |
| Whole-input reads |
Are file, user, network, process, and archive reads bounded before readAll, string conversion, or in-memory materialization? |
| Buffers and chunking |
Does "streaming" retain all chunks? Are builders, byte buffers, collectors, joins, copies, decompression, or encoding pipelines bounded? |
| Memory mapping |
What maps files, who unmaps/closes channels, and can address-space/native mappings accumulate? |
| Images and graphics |
Are dimensions/pixel counts checked before decode? Are encoded and decoded copies concurrent? Are graphics, rasters, textures, and image caches disposed? |
| Audio and video |
Are duration, channels, sample rate, frame size, tracks, and decoded buffers bounded? Are players/codecs/streams released? |
| Archives |
Are entry count, per-entry bytes, total expanded bytes, nesting, path uniqueness, and compression ratio limited? |
| Serialization |
Are graph depth, references, array lengths, object types, and total bytes filtered before object allocation? |
| XML and JSON |
Are document bytes, depth, nodes, strings, arrays, names, entity processing, and numeric declarations limited? Streaming APIs can still build unbounded models. |
| Sockets and streams |
Are timeouts, message/frame sizes, pending writes, connection counts, and close paths present on success, failure, cancellation, and timeout? |
| Native resources |
Are direct buffers, JNI allocations, GPU resources, file descriptors, font handles, codecs, and OS objects explicitly released on the owning thread/context? |
| Amplification |
How many simultaneous representations exist: compressed, encoded, bytes, chars, tokens, DOM, model, decoded media, copies, and output? |
| Integer arithmetic |
Can count, dimension, stride, frame, or byte-size arithmetic overflow before allocation? Is checked wide arithmetic used? |
| Cleanup and eviction |
Do close, dispose, shutdown, cancel, remove, clear, and eviction run on all paths and actually sever strong references? |
| Concurrency accumulation |
Multiply per-item memory by workers, requests, threads, retries, listeners, and in-flight stages. Are check-then-act races able to bypass limits? |
| Process and container budget |
Does heap plus metaspace, code cache, thread stacks, direct/native buffers, mapped files, GPU/JNI memory, and safety margin fit the actual OS/container limit? |
Record zero matches explicitly. Also search aliases and framework-specific equivalents
for each detected language and dependency.
5. Trace and classify every candidate
Read declarations, constructors, mutators, owners, call sites, error paths, cancellation,
shutdown, tests, and configuration. Verify whether limits are hard, configurable,
attacker/user controlled, count-only, or weight-aware.
Classification:
- Confirmed defect: Static evidence proves a reachable unbounded/missing-lifecycle
mechanism under stated conditions. Runtime reproduction strengthens but is not required.
- Plausible risk: The mechanism exists, but reachability, cardinality, ownership,
lifetime, input trust, or practical trigger needs confirmation.
- Reviewed non-issue: Evidence proves a finite domain, effective bound/eviction,
complete lifecycle, weak ownership, streaming behavior, or non-production isolation.
Never promote a regex match to a finding. Never omit a significant reviewed non-issue
merely because it is not actionable.
6. Score severity and confidence separately
Severity:
| Level |
Meaning |
| Critical |
Low-effort remote/untrusted trigger can reliably exhaust shared production capacity |
| High |
User-controlled or routine workload can exhaust heap/native capacity or permanently retain large graphs |
| Medium |
Sustained, unusual, privileged, or lifecycle-specific use can cause material growth |
| Low |
Small fixed leak, test/tool-only impact, or difficult trigger with limited scope |
| Info |
Hardening or observability recommendation without demonstrated exhaustion |
Confidence:
- High: Direct code and ownership evidence; trigger and missing bound/cleanup are clear.
- Medium: Strong mechanism evidence with one unresolved lifecycle/input assumption.
- Low: Indirect signal requiring call-path or runtime confirmation.
7. Quantify retention and amplification
For each finding, estimate:
- retained objects and their root;
- per-item or per-task weight;
- growth variable and practical maximum;
- simultaneous representations/copies;
- native stack/direct/GPU/file-handle contribution;
- concurrency multiplier; and
- whether GC can reclaim the graph.
Use checked arithmetic. Distinguish retained leaks from transient peak amplification:
both can produce OOM, but remediation differs.
Derive a provisional concurrency ceiling from measured peak retained/native bytes per
task and the memory budget remaining after heap baseline, JVM/native overhead, and a
safety margin. Do not select pool sizes from CPU count alone when tasks retain large
images, documents, archives, or response graphs.
8. Use authoritative evidence
Prioritize current primary sources:
- language and runtime specifications/API documentation;
- framework/library/vendor documentation;
- operating-system and file-format specifications;
- maintained security/performance guidance from authoritative organizations;
- reputable secondary sources only when primary guidance is unavailable.
Record source title, version, URL, and the claim it supports. If user-provided sources
or runtime artifacts are unavailable, say so without inventing their contents.
9. Recommend behavior-compatible remediation
Recommendations must:
- preserve documented behavior or identify the intentional behavior change;
- add characterization tests before changing ambiguous behavior;
- bound by memory weight as well as count where item sizes vary;
- define overflow, rejection, coalescing, spill, or eviction semantics;
- close resources on success, exception, cancellation, timeout, and shutdown;
- avoid silent drops and broad exception swallowing; and
- include observability for limits, queue depth, evictions, rejections, and peak usage.
10. Validate without destabilizing the target
Static validation:
- inventory symmetric difference is empty;
- every inventory row has a disposition;
- every taxonomy row has a result;
- every citation resolves at the audited commit;
- every positive finding has all required fields;
- confirmed/plausible/non-issue counts match the report;
- exclusions and limitations are explicit; and
- the target Git status has not changed.
Optional runtime validation:
- reproduce under a deliberately small heap or memory limit;
- use JFR, heap histograms/dumps, native-memory tracking, descriptor counts, and
thread dumps when safe;
- compare at least two equivalent post-GC snapshots or recordings across repeated
workload cycles, including dominator and GC-root-path differences;
- correlate live-set growth with thread, class-loader, queue, cache, direct-buffer,
file-descriptor, and process-RSS trends rather than assuming every OOM is a heap leak;
- compare dominators, retained sizes, queue/cache cardinality, and resource counts
before and after repeated operations; and
- clean up all temporary data and processes.
Runtime failure to reproduce does not disprove a statically confirmed unbounded
mechanism; document environment, workload, duration, and observed ceiling.
Required Report Format
# OOM and Memory-Retention Audit
## Audit identity
- Repository, commit, branch, dirty state, runtime/tool versions
## Scope and inventory
- Counts by production/test/tooling/generated/vendored
- Inventory artifact path/hash
- Per-file dispositions and limitations
## Method and taxonomy coverage
- Search/analysis tools
- Category result table, including zero matches
## Confirmed defects
### [ID] [Title]
- Classification
- Severity / confidence
- Evidence: repository-relative path:line-range, anchored to commit
- Trigger
- Retained memory and root
- Growth/amplification/concurrency analysis
- Existing bound/cleanup and why it fails
- Behavior-compatible remediation
- Test and runtime validation
- Authoritative sources
## Plausible risks
- Same fields, with unresolved assumptions stated
## Reviewed non-issues
- Candidate, evidence, and proven bound/cleanup/finite scope
## Coverage gaps and limitations
- Inaccessible files, generated/vendor treatment, unavailable sources,
omitted runtime work, environment constraints
## Prioritized remediation plan
- Order by severity, confidence, effort, and behavior risk
Evidence Quality Gate
Reject or downgrade a finding when:
- the citation is only an import, declaration, or lexical match;
- no retention root or peak-allocation path is identified;
- a cleanup/eviction path was not inspected;
- the trigger is impossible under the input contract;
- the collection domain is demonstrably finite;
- test-only code is presented as production reachable;
- severity conflates impact with confidence; or
- claims rely on unavailable sources.
The final report should be reproducible by another reviewer at the recorded commit.
1---2name: repository-oom-audit3description: Performs exhaustive repository-wide OutOfMemoryError and memory-retention audits with tracked-file inventory, systematic risk taxonomy, anchored evidence, severity and confidence, reviewed non-issues, remediation, and validation. Use for OOM investigations, memory leak audits, unbounded growth reviews, resource-lifecycle audits, allocation-amplification analysis, or JVM/native memory risk assessments.4---56# Repository OOM Audit78## Purpose910Finds heap, native-memory, thread, file-descriptor, and retained-graph conditions11that can exhaust a process. Produces an evidence-backed report without confusing12lexical matches, plausible risks, and confirmed defects.1314This is an audit method, not a pattern dump. Every tracked file receives a15screening disposition, every positive finding is traced through ownership and16cleanup, and important non-issues remain visible as coverage evidence.1718## Safety Invariants19201. Record the exact commit before analysis.212. Keep the target repository read-only unless the user separately authorizes fixes.223. Do not commit, push, open issues, or create pull requests unless explicitly asked.234. Preserve unrelated work in dirty checkouts.245. Store generated inventories and reports outside the target when repository policy25 forbids audit artifacts.266. Do not copy substantial source into reports; cite and paraphrase.277. Treat runtime profiling as optional and non-invasive. Never collect or expose28 sensitive heap contents without explicit authorization.2930## Completion Standard3132An audit is complete only when:3334- the commit and repository state are recorded;35- every tracked file has a disposition or explicit assessment limitation;36- every taxonomy category has a coverage result, including zero-result categories;37- heap, requested-array, native/direct, thread-stack, metaspace/class-loader,38 finalization/reference, and container/process memory domains are addressed;39- every candidate is classified as confirmed, plausible, or reviewed non-issue;40- every actionable finding has anchored evidence, severity, confidence, trigger,41 retained-memory analysis, remediation, and test guidance;42- exclusions, unavailable sources, and runtime limitations are explicit; and43- inventory and report consistency checks pass.4445## Workflow4647### 1. Freeze identity and constraints4849Record:5051```bash52git rev-parse HEAD53git status --short54git remote -v55git submodule status56```5758Capture repository guardrails, generated/vendor policy, authorized output location,59build system, runtime versions, and whether source modifications are forbidden.60Line citations refer to this commit even if the working tree later changes.6162### 2. Build the exhaustive inventory6364Use Git as the scope authority:6566```bash67git ls-files -z68```6970Classify every path by:7172- language and file type;73- production, test, tooling, generated, vendored, configuration, or binary;74- module/component;75- screening disposition; and76- limitation or exclusion reason.7778Required dispositions:7980| Disposition | Meaning |81|---|---|82| `screened-no-candidate` | Taxonomy screening found no relevant construct |83| `candidate-traced` | One or more matches were manually traced |84| `reviewed-non-issue` | A bound, cleanup path, finite domain, or unreachable path was proven |85| `generated-boundary-reviewed` | Generated file was represented by its generator/parser boundary |86| `vendored-reviewed` | Vendored code was screened and ownership was recorded |87| `assessment-limited` | Access, format, size, tooling, or policy prevented assessment |8889Do not silently exclude tests, tooling, generated files, or vendored code. They can90cause test-runner OOMs, ship into production, or reveal unsafe producer/consumer91contracts. Grouping is allowed only when each path remains present in the inventory.9293Validate inventory completeness by comparing the sorted inventory path column with a94fresh `git ls-files` result. The symmetric difference must be empty.9596### 3. Map memory ownership and input boundaries9798Identify long-lived roots:99100- process and class statics;101- application/session/request objects;102- event loops, UI trees, actors, and service containers;103- executor workers, timers, and thread locals;104- native handles and callback registries;105- class loaders, plugins, reflection metadata, and generated-code caches.106107Identify growth inputs:108109- user files, uploads, clipboard, drag-and-drop, and command arguments;110- network responses, sockets, messages, subprocess output, and logs;111- archive entries, serialized graphs, parser nodes, media dimensions, and metadata;112- internal event rates, edit histories, retries, and concurrent task submission.113114Trace: **source -> allocation/growth -> owner -> retention root -> cleanup/bound -> concurrency multiplier**.115116### 4. Screen the complete taxonomy117118Use language-aware semantic/code-intelligence tools first, then repository search.119Search terms are candidate generators, never proof.120121| Category | Required questions |122|---|---|123| Collections and graphs | Can lists, maps, sets, trees, registries, indexes, pools, dedup tables, or parent/child graphs grow for process/session lifetime? |124| Queues and backpressure | Are queues bounded? What happens when producers outpace consumers or consumers block? Are retry/dead-letter queues bounded? |125| Caches | Is cardinality finite? Are size/weight, TTL, eviction, weak references, invalidation, and class-loader lifecycles correct? |126| Listeners and callbacks | Does every registration have an owner and removal path? Can repeated activation register duplicates? Do publishers outlive subscribers? |127| Histories and logs | Are undo, audit, telemetry, diagnostics, console capture, event journals, snapshots, and recent-value lists bounded by count and weight? |128| Executors and threads | Are pools/queues bounded and shut down? Can platform threads, scheduled tasks, futures, timers, subprocess drainers, or per-request executors accumulate? |129| Thread locals | Are values removed on pooled threads? Can values retain requests, class loaders, buffers, security context, or graphs? |130| Metaspace and code generation | Can class loaders, generated classes, proxies, scripts, plugins, hot reload, reflection metadata, or compiler outputs accumulate? Are unload boundaries real and observable? |131| Finalization and references | Can finalizers, cleaners, phantom/reference queues, or deferred native cleanup fall behind allocation? Are reference-processing threads starved? |132| Whole-input reads | Are file, user, network, process, and archive reads bounded before `readAll`, string conversion, or in-memory materialization? |133| Buffers and chunking | Does "streaming" retain all chunks? Are builders, byte buffers, collectors, joins, copies, decompression, or encoding pipelines bounded? |134| Memory mapping | What maps files, who unmaps/closes channels, and can address-space/native mappings accumulate? |135| Images and graphics | Are dimensions/pixel counts checked before decode? Are encoded and decoded copies concurrent? Are graphics, rasters, textures, and image caches disposed? |136| Audio and video | Are duration, channels, sample rate, frame size, tracks, and decoded buffers bounded? Are players/codecs/streams released? |137| Archives | Are entry count, per-entry bytes, total expanded bytes, nesting, path uniqueness, and compression ratio limited? |138| Serialization | Are graph depth, references, array lengths, object types, and total bytes filtered before object allocation? |139| XML and JSON | Are document bytes, depth, nodes, strings, arrays, names, entity processing, and numeric declarations limited? Streaming APIs can still build unbounded models. |140| Sockets and streams | Are timeouts, message/frame sizes, pending writes, connection counts, and close paths present on success, failure, cancellation, and timeout? |141| Native resources | Are direct buffers, JNI allocations, GPU resources, file descriptors, font handles, codecs, and OS objects explicitly released on the owning thread/context? |142| Amplification | How many simultaneous representations exist: compressed, encoded, bytes, chars, tokens, DOM, model, decoded media, copies, and output? |143| Integer arithmetic | Can count, dimension, stride, frame, or byte-size arithmetic overflow before allocation? Is checked wide arithmetic used? |144| Cleanup and eviction | Do `close`, `dispose`, `shutdown`, `cancel`, `remove`, `clear`, and eviction run on all paths and actually sever strong references? |145| Concurrency accumulation | Multiply per-item memory by workers, requests, threads, retries, listeners, and in-flight stages. Are check-then-act races able to bypass limits? |146| Process and container budget | Does heap plus metaspace, code cache, thread stacks, direct/native buffers, mapped files, GPU/JNI memory, and safety margin fit the actual OS/container limit? |147148Record zero matches explicitly. Also search aliases and framework-specific equivalents149for each detected language and dependency.150151### 5. Trace and classify every candidate152153Read declarations, constructors, mutators, owners, call sites, error paths, cancellation,154shutdown, tests, and configuration. Verify whether limits are hard, configurable,155attacker/user controlled, count-only, or weight-aware.156157Classification:158159- **Confirmed defect:** Static evidence proves a reachable unbounded/missing-lifecycle160 mechanism under stated conditions. Runtime reproduction strengthens but is not required.161- **Plausible risk:** The mechanism exists, but reachability, cardinality, ownership,162 lifetime, input trust, or practical trigger needs confirmation.163- **Reviewed non-issue:** Evidence proves a finite domain, effective bound/eviction,164 complete lifecycle, weak ownership, streaming behavior, or non-production isolation.165166Never promote a regex match to a finding. Never omit a significant reviewed non-issue167merely because it is not actionable.168169### 6. Score severity and confidence separately170171Severity:172173| Level | Meaning |174|---|---|175| Critical | Low-effort remote/untrusted trigger can reliably exhaust shared production capacity |176| High | User-controlled or routine workload can exhaust heap/native capacity or permanently retain large graphs |177| Medium | Sustained, unusual, privileged, or lifecycle-specific use can cause material growth |178| Low | Small fixed leak, test/tool-only impact, or difficult trigger with limited scope |179| Info | Hardening or observability recommendation without demonstrated exhaustion |180181Confidence:182183- **High:** Direct code and ownership evidence; trigger and missing bound/cleanup are clear.184- **Medium:** Strong mechanism evidence with one unresolved lifecycle/input assumption.185- **Low:** Indirect signal requiring call-path or runtime confirmation.186187### 7. Quantify retention and amplification188189For each finding, estimate:190191- retained objects and their root;192- per-item or per-task weight;193- growth variable and practical maximum;194- simultaneous representations/copies;195- native stack/direct/GPU/file-handle contribution;196- concurrency multiplier; and197- whether GC can reclaim the graph.198199Use checked arithmetic. Distinguish retained leaks from transient peak amplification:200both can produce OOM, but remediation differs.201202Derive a provisional concurrency ceiling from measured peak retained/native bytes per203task and the memory budget remaining after heap baseline, JVM/native overhead, and a204safety margin. Do not select pool sizes from CPU count alone when tasks retain large205images, documents, archives, or response graphs.206207### 8. Use authoritative evidence208209Prioritize current primary sources:2102111. language and runtime specifications/API documentation;2122. framework/library/vendor documentation;2133. operating-system and file-format specifications;2144. maintained security/performance guidance from authoritative organizations;2155. reputable secondary sources only when primary guidance is unavailable.216217Record source title, version, URL, and the claim it supports. If user-provided sources218or runtime artifacts are unavailable, say so without inventing their contents.219220### 9. Recommend behavior-compatible remediation221222Recommendations must:223224- preserve documented behavior or identify the intentional behavior change;225- add characterization tests before changing ambiguous behavior;226- bound by memory weight as well as count where item sizes vary;227- define overflow, rejection, coalescing, spill, or eviction semantics;228- close resources on success, exception, cancellation, timeout, and shutdown;229- avoid silent drops and broad exception swallowing; and230- include observability for limits, queue depth, evictions, rejections, and peak usage.231232### 10. Validate without destabilizing the target233234Static validation:235236- inventory symmetric difference is empty;237- every inventory row has a disposition;238- every taxonomy row has a result;239- every citation resolves at the audited commit;240- every positive finding has all required fields;241- confirmed/plausible/non-issue counts match the report;242- exclusions and limitations are explicit; and243- the target Git status has not changed.244245Optional runtime validation:246247- reproduce under a deliberately small heap or memory limit;248- use JFR, heap histograms/dumps, native-memory tracking, descriptor counts, and249 thread dumps when safe;250- compare at least two equivalent post-GC snapshots or recordings across repeated251 workload cycles, including dominator and GC-root-path differences;252- correlate live-set growth with thread, class-loader, queue, cache, direct-buffer,253 file-descriptor, and process-RSS trends rather than assuming every OOM is a heap leak;254- compare dominators, retained sizes, queue/cache cardinality, and resource counts255 before and after repeated operations; and256- clean up all temporary data and processes.257258Runtime failure to reproduce does not disprove a statically confirmed unbounded259mechanism; document environment, workload, duration, and observed ceiling.260261## Required Report Format262263```markdown264# OOM and Memory-Retention Audit265266## Audit identity267- Repository, commit, branch, dirty state, runtime/tool versions268269## Scope and inventory270- Counts by production/test/tooling/generated/vendored271- Inventory artifact path/hash272- Per-file dispositions and limitations273274## Method and taxonomy coverage275- Search/analysis tools276- Category result table, including zero matches277278## Confirmed defects279### [ID] [Title]280- Classification281- Severity / confidence282- Evidence: repository-relative path:line-range, anchored to commit283- Trigger284- Retained memory and root285- Growth/amplification/concurrency analysis286- Existing bound/cleanup and why it fails287- Behavior-compatible remediation288- Test and runtime validation289- Authoritative sources290291## Plausible risks292- Same fields, with unresolved assumptions stated293294## Reviewed non-issues295- Candidate, evidence, and proven bound/cleanup/finite scope296297## Coverage gaps and limitations298- Inaccessible files, generated/vendor treatment, unavailable sources,299 omitted runtime work, environment constraints300301## Prioritized remediation plan302- Order by severity, confidence, effort, and behavior risk303```304305## Evidence Quality Gate306307Reject or downgrade a finding when:308309- the citation is only an import, declaration, or lexical match;310- no retention root or peak-allocation path is identified;311- a cleanup/eviction path was not inspected;312- the trigger is impossible under the input contract;313- the collection domain is demonstrably finite;314- test-only code is presented as production reachable;315- severity conflates impact with confidence; or316- claims rely on unavailable sources.317318The final report should be reproducible by another reviewer at the recorded commit.