Skip to content

research(p014): validate project-isolated reference resolution and binding coverage - #422

Merged
PhysShell merged 5 commits into
mainfrom
research/p014-tiny-poc
Oct 21, 2026
Merged

PhysShell merged 5 commits into
mainfrom
research/p014-tiny-poc

Conversation

@PhysShell

Copy link
Copy Markdown
Owner

What this is

Evidence for the P-014 Tiny PoC, under the owner's decision GO-P014-TINY-POC (after #421). It contains only
documentation, a research instrument, synthetic fixtures and data, all under
docs/evidence/p014-tiny-poc-2026-10/.

Result: PASS-P014-TINY-POC. It covers a research instrument that measures binding. It does not allow
production work.

Owner decision on this evidence: ACCEPT-POC-EVIDENCE / GO-PR / NO-PRODUCTION. The next production stage needs a
separate decision.

Order of work (committed history)

  1. 5a9bb32 — pre-registration (criteria, KILL, time and memory limits, the SDK conflict contract), committed
    before the instrument existed.
  2. 207ef84 — Amendment 1, committed before any run. The docs(evidence): P-014 reference coverage — GO-P014-BOUNDED-DESIGN / NO-PRODUCTION (research only) #419 per-site lists had never been committed, so the
    comparison changed to sites resolved in legacy and not in exact.
  3. 35e2c8c — instrument, fixtures, controls against the SDK oracle.
  4. cb9519d — real projects P4/P5, cost, report.
  5. a685402 — the four limits of the PASS, written out explicitly.

Results

Area Result
Project isolation 0 foreign bindings across all controls, P4 (4 projects) and P5. K2, K4 (CS0101 in one shared compilation, CS0433 at the site when projects are separate), F2.3–F2.5 and the guard self-test all pass
Reference selection K8a, K8b, K8c, K9 and K3 manifests equal the SDK's own resolved references on my synthetic fixtures, restored offline from the global packages folder. The "framework wins on a tie" assumption was never needed
Coverage sidecar deterministic: byte-identical in 3 of 3 runs for every mode and project; invariants hold
Calls resolved, exact vs legacy P4 62.0% vs 25.1%; P5 64.1% vs 32.1%
Cost, P5 warm run 1.43× legacy (limit 3×); peak about 208 MB
OwnIR and diagnostics unchanged; today's extractor facts are byte-identical across 3 runs

Calls resolved in legacy and not in exact. P5 has none. P4 has 22, and all were read.

  • Cause. Implicit usings are not applied in the exact mode, as the owner required. In the separate per-project
    compilation, the error types they leave behind show up at the call site.
  • Legacy over-counts. It counted these calls as resolved although their signatures contain error types.
  • No wrong binding. None of the 22 is a wrong binding in the exact mode.

#419 R3 sites. All 7 bind to real IEventSymbols, including the actionable ObservableObject.PropertyChanged.
The 6 FPs are a problem of the lifetime model, not of references.

Limits (REPORT §8)

  1. References are not the whole source set. A COMPLETE reference set does not mean a complete compilation:
    P4 and P5 still have an incomplete source set (implicit usings, generators, XAML).
  2. Conflict rule qualified only in part. It is shown only on the forms checked here:
    • package vs package with the same DLL name is not qualified;
    • the rank and platform steps are not qualified;
    • the full SDK contract is not qualified.
  3. The host's .NET changed during the work. The 8.0.31 and 10.0.12 packs are gone, so the old measurement
    cannot be reproduced on its original packs.
  4. P5 picks up a Directory.Build.targets from outside the repository. It is reported only; there is no
    guarantee about configuration that comes from outside the repository.

Disclosed deviations

  • Three defects in my own instrument and comparison script were fixed before the real-project runs:
    • a type inside new T();
    • the order the K1 check expected;
    • the package version, which the oracle gives only in FusionName.
  • One fixture run used a stale binary and was discarded.
  • The read-only diag mode was added after the measurements.

Checks

  • Diff scope. The diff touches only docs/evidence/p014-tiny-poc-2026-10/; git diff --name-only 228e38d7
    lists nothing outside it.
  • Secrets and paths. ruff check . passes; gitleaks found nothing on the 5 commits; there are no local paths
    (they are replaced by <nuget>, <dotnet>, <research> and <work>).

🤖 Generated with Claude Code

https://claude.ai/code/session_01TFkNAFFQz9KoTzpPws8vYG

PhysShell and others added 5 commits October 21, 2026 11:04
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TFkNAFFQz9KoTzpPws8vYG
…ta unavailable)

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

Controls K1 K2 K4 K5 K6 K7 K11 K12, F2.3-F2.5 and the isolation guard pass in
memory; K3/K8a/K8b/K8c/K9 manifests equal the SDK's own resolved references on
offline-restored synthetic fixtures; K10 reports p2p-no-assets. Two instrument
defects found and fixed before any real-project run (type node inside new T(),
K1 check order); one comparator defect (oracle package version in FusionName).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TFkNAFFQz9KoTzpPws8vYG
Per-project compilations from existing assets/packs: foreign_binding 0 on all
controls and on P4 (4 units) and P5; K8a/K8b/K8c/K9/K3 manifests equal the SDK
oracle; invocations resolved P4 62.0% vs 25.1% legacy, P5 64.1% vs 32.1%;
22 P4 legacy-only sites all read: implicit usings not applied surface at the
use site across project boundaries (legacy over-count), no wrong binding;
P5 warm cost 1.43x legacy, peak ~208 MB. No production, OwnIR or verdict change.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TFkNAFFQz9KoTzpPws8vYG
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TFkNAFFQz9KoTzpPws8vYG
@PhysShell
PhysShell merged commit 22b29d5 into main Oct 21, 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