Skip to content

Commit 228e38d

Browse files
authored
Merge pull request #421 from PhysShell/design/p014-bounded-design
docs(evidence): P-014 bounded design and project-isolation falsifiers
2 parents ad17d7b + 3d6be6c commit 228e38d

7 files changed

Lines changed: 867 additions & 0 deletions

File tree

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# P-014 bounded design — pre-registration
2+
3+
Written 2026-10-21 07:00 +05, before the source-level audit and before any falsifier run. Base: `main`
4+
`ad17d7b2` (merge of #419). #420 (`bf0b4e0a`, report text only) is read but not merged or changed.
5+
6+
**Budget.** 0.5 agent-day, counted from 06:55. Not extended. When it runs out, I stop and commit whatever evidence
7+
exists, with the verdict `INCONCLUSIVE-P014-DESIGN`.
8+
9+
**Owner mandate.** `GO-P014-BOUNDED-DESIGN / NO-PRODUCTION` (#420 §8.7). This packet is a design only:
10+
- no production, OwnIR, core, extractor, CI or golden change;
11+
- no restore, build or MSBuild evaluation of third-party projects; no package download;
12+
- no re-run of the #419 sweep.
13+
14+
## 1. Question
15+
16+
Can C# semantic binding be made more trustworthy while meeting three conditions?
17+
- foreign references do not leak between projects;
18+
- a partial analysis is not reported as a complete one;
19+
- newly resolved symbols do not turn into a stream of false OWN001/event findings.
20+
21+
## 2. Allowed evidence
22+
23+
- **Source reading** of the extractor, the core, the specs and the docs, at `ad17d7b2`.
24+
- **#419 data as frozen:**
25+
- R2 counts;
26+
- the 50-site sample;
27+
- the R3 triage: 1 actionable TP, 2 minor TPs and 6 FPs;
28+
- K1–K7.
29+
30+
Nothing is re-scored.
31+
- **Cheap falsifiers.** Synthetic fixtures only, at most a few files each, written under this folder:
32+
- run through the frozen #419 instrument (`instrument/`), or through a throw-away Roslyn script in a temp
33+
folder;
34+
- read-only inspection of the `project.assets.json` files already on disk for P1–P5 (structure only:
35+
`targets` keys, `project.frameworks`, `type: project` libraries, RID targets).
36+
37+
No third-party project is built or restored.
38+
- **Official NuGet/MSBuild/Roslyn documentation**, only for claims about how those tools define things. It never
39+
replaces our measurements.
40+
41+
## 3. Gates and kill rules (fixed now)
42+
43+
Each gate states a necessary condition, the cheapest falsifier I will try, and a KILL condition. A gate is `PASS`
44+
only if its falsifier was tried and failed to break the condition, or the condition holds by construction and I
45+
cite the code or documentation for it.
46+
47+
| Gate | Necessary condition | Cheapest falsifier | KILL if |
48+
|---|---|---|---|
49+
| **D1 correctness** | For a bounded input class (SDK-style, existing `obj/project.assets.json`, one chosen TFM), a resolver can name the exact reference set from on-disk data | An input from the supported class where the algorithm picks a wrong assembly, or binds a symbol with certainty it should not have | The class shrinks to nothing useful, or excluding wrong picks needs MSBuild evaluation / a project-system clone |
50+
| **D2 isolation** | Project A's references, usings or source cannot change project B's binding | Synthetic: two projects with `Dup.T`; same simple assembly name at two versions; `ImplicitUsings` enable vs disable; `Timer` ambiguity; one project with missing dependencies | The design still merges different projects into one compilation and reports the result as trustworthy |
51+
| **D3 honest coverage** | A deterministic, machine-checkable coverage record with explicit numerators, denominators and scope, in which unsupported and skipped never count as clean | Construct a case where the proposed record reports "resolved" or "complete" while a method was skipped, or a reference was missing | No such record fits the existing `--stats`/OwnIR contract without a new incompatible vocabulary |
52+
| **D4 precision** | New facts reach public verdicts only under a policy that cannot regress true findings or known negative controls | Replay the #419 R3 triage (9 new findings) under each policy; check that the policy does not depend on suppressing the 6 known FPs | Every policy that delivers the 1 actionable TP also activates the 6 FPs in the default mode, and there is no opt-in boundary |
53+
| **D5 cost** | The design runs with no restore, no network, no third-party MSBuild targets and no `MSBuildWorkspace`; it keeps `--ref-dir` and directory mode; it degrades honestly when assets or packs are missing | Name a required input that is only obtainable by a forbidden action within the supported class | Safe resolution needs a forbidden action, or its cost clearly exceeds the measured benefit (1 actionable TP over 5 projects) |
54+
55+
## 4. Verdict rule (fixed now)
56+
57+
- **`GO-P014-TINY-POC`.** D1–D5 are all `PASS`, possibly with a narrowed input class. The recommended
58+
architecture's PoC contract can be stated with fixtures, an expected manifest, K1–K7, a KILL and a budget.
59+
- It does **not** authorise production code.
60+
- It does **not** authorise diagnostic activation.
61+
- **`KILL-P014-DESIGN`.** Any gate meets its KILL condition.
62+
- **`INCONCLUSIVE-P014-DESIGN`.** A gate cannot be decided within the budget, or it depends on an input that is
63+
not available locally.
64+
65+
Priorities fixed now:
66+
- A narrow, correct mode is preferred over a wide one that sometimes binds the wrong C# semantics.
67+
- A result that keeps public verdicts unchanged ("coverage-only") is allowed to count as the useful outcome. The
68+
owner's direction (#420 §8.7) puts coverage and the ban on silent wrong binding before new warnings.
69+
70+
## 5. What I will not claim
71+
72+
- Any performance figure that I did not measure.
73+
- Correctness of symbols that were not read.
74+
- That a reference-correct compilation has a complete source set. Implicit usings, `#if` defines, generated
75+
sources and project references are a separate axis.

0 commit comments

Comments
 (0)