Skip to content

P54 verify round: the in-process isolation sweep is load-bearing; ratchets cite an issue by number (refs #2250) - #2323

Merged
antonsynd merged 2 commits into
mainlinefrom
dev
Oct 15, 2026
Merged

antonsynd merged 2 commits into
mainlinefrom
dev

Conversation

@antonsynd

Copy link
Copy Markdown
Owner

Summary

/verify-implementation of P54 (plan-9ef825, #2250) — two remediation commits on top of the merged implementation (PR #2318 @ 045ce6b).

Filed by class from the round: #2319, #2320, #2321, #2322; cells on #2182, #2114, #2314, #2151, #2131, #2250.

Test plan

  • Whole-solution gate @ f8c37f9: 80351 passed / 0 failed / 4 skipped (measured; Core 3989, Stdlib 4273, Cli 898/1, Lsp 21938, Compiler 49253/3)
  • dotnet format whitespace --verify-no-changes clean @ f8c37f9
  • check_spy_staleness.sh, check_spy_tests_staleness.sh, check_allowlist_issue_state.sh clean @ f8c37f9
  • Regen (spy stdlib, spy tests, stdlib docs), check_spec_blocks.sh, build_tools pytest (1142 passed) clean @ 045ce6b; the two commits touch only test code and one comment
  • CI, including the in-process-isolation sweep step (auto-merge waits on it)

🤖 Generated with Claude Code

https://claude.ai/code/session_01TspFCVXESf3WxYCGazmEb7

antonsynd and others added 2 commits October 15, 2026 14:48
…losed #2250; the host-package direction record gains the unused-import sibling; two roster rows describe the framework set as f5fb7f8 built it; the emitter's Rule-2 site cites #2320 (refs #2250, refs #2320)

/verify-implementation of plan-9ef825 (P54) @ 045ce6b, remediation slice 1.

Latent ratchet conflict (regression auditor): InProcessIsolationSweepTests required every
allowlist row to cite exactly "#2250", and the KnownRed tables of TpaNamespaceGateTests,
CrashBundleExclusivityTests, StdlibModuleGlobalConcurrencyTests and WarmInstanceParityTests
asserted the same substring. #2250 is CLOSED, and check_allowlist_issue_state.sh reads every
tracked *allowlist*.txt, so the first future red cell could not be allowlisted without
reddening one gate or the other. All five now use the repo's cite convention (a `#\d+` issue
number, as CliOptionEffectSweepTests / FormatterBlankLineSweepTests spell it); whether the
cited issue is OPEN stays check_allowlist_issue_state.sh's question.

Mutation (contract §2), InProcessIsolationSweepTests.Sweep_RegularSlice @ this tree:
  row appended with no issue number → RED (1 failed: InvalidOperationException "every row cites
  an issue by number (#NNNN)"); row appended citing #9999 → the cite check passes (1 passed);
  allowlist restored from the copy → GREEN (1 passed).

Direction record (contract §3): an UNUSED `from system.composition import ExportAttribute`
compiled with SPY0452 at base 486c9a8 and is SPY0301 at 045ce6b — worked → rejected under
the owner's 2026-10-15 ruling on the same mechanism (the unused system.reactive.linq cell on
#2250): the base answer depended on which packages the host shipped. Added as the third
HostAssemblyVisibilityE2ETests row (measured: composition_unused passed, 675 ms).

Roster text: StaticStateConformanceTests' s_framework row and ProcessWideResolutionScanTests'
LoadFrameworkAssembly row still described the pre-F3 "System.*/Microsoft.*/netstandard/mscorlib
+ compiler dependencies" set; both now name the shared-framework directory + Sharpy.Core.

RoslynEmitter.IsClrTypeGenericInNamespace's "no tracker yet" comment now cites #2320 (Rule 8).

Verified: build 0 warnings; the eight touched classes 33 + 63 + 7 + 5 passed, 0 failed
(Compiler / Stdlib / Cli / Lsp, filtered, this tree).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TspFCVXESf3WxYCGazmEb7
…uiltin-shadowing triggers with typed probes and a per-run referenced-library pair make it red under the visibility-filter and master-freeze reverts and at base; an allowlist row must name a corpus program (refs #2250)

/verify-implementation of plan-9ef825 (P54) @ 045ce6b, remediation slice 2.

The class-cure auditor proved the plan's own ratchet VACUOUS @ 045ce6b (contract §2): the sweep
reported 0 red at base 486c9a8 where the class existed, and stayed GREEN (9216 observations)
under the two mutations every other P54 guard goes red on — M9, the visibility seam's filter
reverted to a raw AppDomain scan, and M7, the master freeze + own-symbol declaration made inert.
Cause: the corpus carried no reference beyond Sharpy.Core and no builtin-named definition in a
block, and the oracle-first warm-up hid first-use races.

The corpus now carries:
- Triggers: WarmInstanceTriggers.AllTexts verbatim (8) + a generated matrix of kinds {class, def,
  dataclass, struct, interface, union, delegate} × names {list, format, str, len} × positions
  {def-body, mod-try} (56; the regular slice takes the first 8, GapDiscovery all 64), scheduled
  under analyze.
- Probes (8, both operations, and once more under analyze AFTER the schedule's last trigger),
  each with an OracleMustCarry control (SPY0220 / SPY0203 / success) asserted on the solo oracle
  before the concurrent phase — the absence assertion's positive control.
- A library pair built per run by Roslyn (P54SweepLib_<tag>, a unique namespace per run):
  library/greeter_referenced (oracle: success) and library/greeter_unreferenced (oracle:
  SPY0300), the first steps of every schedule; the reference-free oracles are computed FIRST so
  no earlier run's leaked copy can answer them; a bystander Compiler holds the library alive
  through the concurrent phase (the cell-4 shape).
- One Compiler per distinct reference set; CompilerApi references ride on the options.
- LoadAllowlist refuses a row whose program id is not in InProcessIsolationCorpus.AllIds — a
  typo could otherwise park a red cell as "not exercised" forever.

Mutation record (worktree at 045ce6b, restore via cp + touch, rebuilt each time):
  M9 broken → RED: regular 12 rows (library/greeter_unreferenced × 3 sharings × {1 order,
    2 drift} × {analyze: SPY0300 → success; compile: SPY0300 → SPY0908 CS0400}, k/R 1/1);
    GapDiscovery 6 rows (3 sharings × 8 × {analyze, compile} drift, 8/8). Restored → GREEN.
  M7 broken → RED: regular 21 rows (probe/builtins_ok, probe/format_typed, probe/str_no_member,
    probe/list_no_member × {api-per-thread, api-shared} × {1 order, 2 drift}; two fstrings stems;
    three verbatim type-definition triggers at api-shared 2 drift — SPY0701 duplicate __eq__ on
    the second analysis; k/R 1/1); GapDiscovery 38 rows, all drift 8/8. Restored → GREEN.
  BASE 486c9a8 → RED: regular 33 rows (= M9's 12 ∪ M7's 21), GapDiscovery 44 rows, 8/8.
  HEAD unmutated → GREEN 4/4 with the allowlist at 0 rows: regular red=0 (828 observations,
    588 cells), GapDiscovery red=0 (26 880 observations, 912 cells).
  Unknown program id row ("no/such_program api-shared 2 analyze drift # #9999 …") → RED
    (InvalidOperationException "is not a corpus program id"); restored → GREEN (this tree).

Timings: regular slice 10 s → 13 s; GapDiscovery 2 m 14 s → 2 m 49 s.

Measured property worth knowing: the frozen-master seam is visible only on CompilerApi analyze
— compiler-per-thread and every compile cell build a fresh BuiltinRegistry per call and stay
green under M7; len_typed / exception_typed / dataclass_user never go red because a len(...)
call is checked by the name-keyed __len__ rule and ignores the retyped symbol (ledger row,
candidate #1933). UsedAssemblyPaths is empty for every program at both shas (ledger row,
#2313 cell 4).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TspFCVXESf3WxYCGazmEb7
@antonsynd
antonsynd merged commit 8e0791f into mainline Oct 15, 2026
28 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