Skip to content

docs(evidence): N1-F0 — KILL-N1 at F0-B (may-throw model, not ownership) - #418

Merged
PhysShell merged 3 commits into
mainfrom
research/n1-f0
Oct 20, 2026
Merged

PhysShell merged 3 commits into
mainfrom
research/n1-f0

Conversation

@PhysShell

Copy link
Copy Markdown
Owner

N1-F0 ownership feasibility gate under ACCEPT-N1-COMPETITOR-GATE / GO-N1-OWNERSHIP-FEASIBILITY / NO-PRODUCTION.

Result: KILL-N1; the first failing part is F0-B. The failure is in the may-throw model, not in ownership.

Part Verdict
F0-A pass: R, X, B stay missed under every interprocedural_analysis_kind (None / NonContextSensitive / ContextSensitive) and both ownership-transfer switches. Every disposal-related diagnostic inside the method was collected; R has only an adjacent CA2000 on out var oldClient
F0-B fail: the frozen oracle establishes ownership on all three real base files through repository-internal disposal of the hand-over target, with no IDisposable/Create*/await cue, and is silent on N1–N9. It flags the BareWire fix, because the registered "any invocation may throw" rule counts Guid.NewGuid().ToString("N") before the early hand-over
F0-C pass by its rule: the existing acquire/release/throw-edge facts suffice, with extractor-side work only. But the existing StatementMayThrow is the same coarse model (the extractor's own "CA2000 firehose")
  • Order of commits. Pre-registration 66731cc2, then the oracle frozen in 081b68ee (after control-only debugging), then one scored run on the real files.
  • Also recorded. The R fix is silent for the wrong reason: its hand-over goes through a local wrapper and an object initializer, which the ownership rules do not cover.
  • Not scored. A may-throw model that exempts non-throwing BCL calls would plausibly clear the B fix. Nothing was run to show it.

Research only, under docs/evidence/n1-f0-2026-10/; third-party sources are referenced by SHA and hash, not committed.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TFkNAFFQz9KoTzpPws8vYG

PhysShell and others added 3 commits October 20, 2026 21:52
F0-A: CA2000 interprocedural kinds and every disposal-related diagnostic
inside the buggy methods. F0-B: ownership oracle by repository-internal
disposal of the hand-over target (field, collection, in-source wrapper),
borrow table only suppresses; real R/B/X base+fix files and controls
N1-N9, P-R/P-B/P-X. F0-C: can existing OwnIR facts carry factory
acquisition, hand-over and throw edges. Fixed before any run.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TFkNAFFQz9KoTzpPws8vYG
…llector

Oracle (rules 1-3, defect rule) with "disposes r" operationalised in the
header; one control-driven fix (a dispose of r inside the catch is not a
throwing site, control N6). Controls: N1-N9 silent, P-R/P-B/P-X reported.
F0-A collector script (method spans, interprocedural kinds).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TFkNAFFQz9KoTzpPws8vYG
F0-A pass: R, X, B stay missed under every CA2000 interprocedural kind
with all disposal diagnostics in the method collected. F0-B fail: the
frozen oracle establishes ownership on all three real base files via
repository-internal disposal (no IDisposable/Create*/await cue) and is
silent on N1-N9, but flags the BareWire fix because the registered
"any invocation may throw" rule counts Guid.NewGuid() before the early
hand-over. F0-C: existing acquire/release/throw-edge facts suffice, but
the existing StatementMayThrow is the same coarse model.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TFkNAFFQz9KoTzpPws8vYG
@PhysShell
PhysShell merged commit c6e8a3c into main Oct 20, 2026
76 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant