Skip to content

RequirePrebuilt: first access parks with a named refusal — Roslyn never starts (#2193 §A completion) - #2209

Merged
rbuergi merged 2 commits into
mainfrom
feat/require-prebuilt-park
Aug 25, 2026
Merged

rbuergi merged 2 commits into
mainfrom
feat/require-prebuilt-park

Conversation

@rbuergi

@rbuergi rbuergi commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Stacked on #2198 (retargets to main when it merges). Completes MeshWeaver#2193 §A at the deepest seam.

What changed

The compile watcher's Pending handler is the one point every route into Roslyn passes through — first access, a release request (which un-parks first, then lands here), a self-heal kick, a framework-stale rebuild. On a mesh that sets Modules:RequirePrebuilt, a type flipped to Pending without a usable build is now:

  • parked (deterministic — the miss reproduces until a bundle lands), so no later trigger can storm;
  • settled at Error with one named reason: the type, the framework identity/architecture the assembly is missing for, the package whose bundle publishes it, and how to retry;
  • never compiled — the park registry's attempt counter (incremented only inside the real dispatch) stays at zero.

Every instance page renders that reason through the existing compilation-error overlay instead of waiting on a compile that was never going to be allowed. The park carries the type's current source snapshot so the sources watcher cannot un-park it against a null baseline (the pin caught exactly that ping-pong). Flag off: byte-for-byte unchanged.

Contract pinned

RequirePrebuiltParkTest (Monolith, flag on): a VALID type with no adopted assembly → Error naming the policy key, the type, the live identity and the package; IsParked true with the same reason; GetCompileAttemptCount == 0. NodeTypeCompileParkTest green as the flag-off control (7/7). Graph builds Release -warnaserror.

Rollout

Nothing changes until a deployment opts in; enable together with #2198's install-lane refusal. Refs #2193. Merge is yours, Roland.

🤖 Generated with Claude Code

…er starts (#2193 §A)

The adopt-only gate at the ONE seam every route into a compile passes
through: the compile watcher's Pending handler. On a mesh that sets
Modules:RequirePrebuilt, a type flipped to Pending without a usable build —
first access, a release request, a self-heal, a framework-stale rebuild —
is PARKED (deterministic) and settled at Error with one named reason: the
type, the framework identity/architecture the assembly is missing for, the
package whose bundle publishes it, and how to retry. Every instance page
renders that reason through the compilation-error overlay instead of
hanging; the park registry's attempt counter stays at zero — the observable
proof no Roslyn pass started. The park carries the type's current source
snapshot so the sources watcher cannot un-park it against a null baseline
(a park/un-park ping-pong, caught by the pin). Flag off: unchanged.

Pinned in RequirePrebuiltParkTest (valid config, no bundle → Error naming
key/type/identity/package, parked, zero attempts); NodeTypeCompileParkTest
stays green as the control.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 25, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 3)

    9 files  ±0      9 suites  ±0   3m 49s ⏱️ - 1m 6s
1 682 tests ±0  1 677 ✅ ±0  5 💤 ±0  0 ❌ ±0 
2 190 runs  +1  2 185 ✅ +1  5 💤 ±0  0 ❌ ±0 

Results for commit 90735c6. ± Comparison against base commit b7673a1.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Aug 25, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 5)

   10 files  ±0     10 suites  ±0   6m 40s ⏱️ -11s
1 254 tests ±0  1 253 ✅ ±0  1 💤 ±0  0 ❌ ±0 
1 255 runs  ±0  1 254 ✅ ±0  1 💤 ±0  0 ❌ ±0 

Results for commit 90735c6. ± Comparison against base commit b7673a1.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Aug 25, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 4)

2 144 tests  ±0   1 845 ✅ ±0   8m 58s ⏱️ - 1m 2s
    9 suites ±0     299 💤 ±0 
    9 files   ±0       0 ❌ ±0 

Results for commit 90735c6. ± Comparison against base commit b7673a1.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Aug 25, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 0)

1 287 tests  ±0   1 287 ✅ +1   17m 8s ⏱️ + 2m 28s
    9 suites ±0       0 💤 ±0 
    9 files   ±0       0 ❌  - 1 

Results for commit 90735c6. ± Comparison against base commit b7673a1.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Aug 25, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 2)

3 352 tests  +7   3 352 ✅ +7   8m 17s ⏱️ +17s
    8 suites ±0       0 💤 ±0 
    8 files   ±0       0 ❌ ±0 

Results for commit 90735c6. ± Comparison against base commit b7673a1.

This pull request removes 90 and adds 97 tests. Note that renamed tests count towards both.
MeshWeaver.Hosting.Monolith.Test.RouterTrafficTest ‑ NodeCreate_IsNeverIssuedByTheRouter
MeshWeaver.Hosting.Monolith.Test.RouterTrafficTest ‑ SignalRTokenValidation_IsNeverIssuedByTheRouter
MeshWeaver.Hosting.Monolith.Test.ScheduledPostWatcherTest ‑ APostWithNoAuthorProfile_IsNotArmed
MeshWeaver.Hosting.Monolith.Test.ScheduledPostWatcherTest ‑ AlreadyPublishedPost_isNeverArmed_evenWithAFutureSlot
MeshWeaver.Hosting.Monolith.Test.ScheduledPostWatcherTest ‑ ArmedTimer_RecordsTheIdentityThatScheduledThePost
MeshWeaver.Hosting.Monolith.Test.ScheduledPostWatcherTest ‑ ProjectionCarriesTheIdentity
MeshWeaver.Hosting.Monolith.Test.ScheduledPostWatcherTest ‑ PublishingAPostByHand_CancelsItsArmedTimer
MeshWeaver.Hosting.Monolith.Test.ScheduledPostWatcherTest ‑ ReschedulingAPost_movesItsTimer_ratherThanAddingASecond
MeshWeaver.Hosting.Monolith.Test.ScheduledPostWatcherTest ‑ ScheduledPost_getsATimerArmedForItsSlot
MeshWeaver.Hosting.Monolith.Test.SearchExclusionIntegrationTest ‑ NoSearchContext_StillReturns_UnderscorePrefixedPaths
…
MeshWeaver.Hosting.Monolith.Test.ResubscribeOnOwnerDisposeTest ‑ SubscriberResubscribes_AfterOwnerDispose
MeshWeaver.Hosting.Monolith.Test.SamplesGraphDataTest ‑ CreateNode_PreservesName
MeshWeaver.Hosting.Monolith.Test.SamplesGraphDataTest ‑ Project_CanBeResolved
MeshWeaver.Hosting.Monolith.Test.SamplesGraphDataTest ‑ Project_PingRequest_ShouldNotDeadlock
MeshWeaver.Hosting.Monolith.Test.SamplesGraphDataTest ‑ Project_QueryAsync_ScopeDescendants_FindsCodeNodes
MeshWeaver.Hosting.Monolith.Test.SamplesGraphDataTest ‑ Todo_QueryAsync_FindsCodeNodes
MeshWeaver.Hosting.Monolith.Test.ScheduledPublishIdentityTest ‑ HubScheduler_IsRefused
MeshWeaver.Hosting.Monolith.Test.ScheduledPublishIdentityTest ‑ NoScheduler_IsRefused
MeshWeaver.Hosting.Monolith.Test.ScheduledPublishIdentityTest ‑ SystemScheduler_IsRefused_EvenThoughItIsPresent
MeshWeaver.Hosting.Monolith.Test.SearchResultAccumulatorTest ‑ ContentUpdateStorm_TriggersNoRerender_OnlyStructuralChangesDo
…

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Aug 25, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 1)

1 763 tests   - 6   1 763 ✅  - 6   9m 43s ⏱️ +46s
   10 suites ±0       0 💤 ±0 
   10 files   ±0       0 ❌ ±0 

Results for commit 90735c6. ± Comparison against base commit b7673a1.

This pull request removes 97 and adds 91 tests. Note that renamed tests count towards both.
MeshWeaver.Hosting.Monolith.Test.ResubscribeOnOwnerDisposeTest ‑ SubscriberResubscribes_AfterOwnerDispose
MeshWeaver.Hosting.Monolith.Test.SamplesGraphDataTest ‑ CreateNode_PreservesName
MeshWeaver.Hosting.Monolith.Test.SamplesGraphDataTest ‑ Project_CanBeResolved
MeshWeaver.Hosting.Monolith.Test.SamplesGraphDataTest ‑ Project_PingRequest_ShouldNotDeadlock
MeshWeaver.Hosting.Monolith.Test.SamplesGraphDataTest ‑ Project_QueryAsync_ScopeDescendants_FindsCodeNodes
MeshWeaver.Hosting.Monolith.Test.SamplesGraphDataTest ‑ Todo_QueryAsync_FindsCodeNodes
MeshWeaver.Hosting.Monolith.Test.ScheduledPublishIdentityTest ‑ HubScheduler_IsRefused
MeshWeaver.Hosting.Monolith.Test.ScheduledPublishIdentityTest ‑ NoScheduler_IsRefused
MeshWeaver.Hosting.Monolith.Test.ScheduledPublishIdentityTest ‑ SystemScheduler_IsRefused_EvenThoughItIsPresent
MeshWeaver.Hosting.Monolith.Test.SearchResultAccumulatorTest ‑ ContentUpdateStorm_TriggersNoRerender_OnlyStructuralChangesDo
…
MeshWeaver.Hosting.Monolith.Test.RequirePrebuiltParkTest ‑ AValidTypeWithNoAdoptedAssembly_ParksWithTheNamedRefusal_AndNeverCompiles
MeshWeaver.Hosting.Monolith.Test.RouterTrafficTest ‑ NodeCreate_IsNeverIssuedByTheRouter
MeshWeaver.Hosting.Monolith.Test.RouterTrafficTest ‑ SignalRTokenValidation_IsNeverIssuedByTheRouter
MeshWeaver.Hosting.Monolith.Test.ScheduledPostWatcherTest ‑ APostWithNoAuthorProfile_IsNotArmed
MeshWeaver.Hosting.Monolith.Test.ScheduledPostWatcherTest ‑ AlreadyPublishedPost_isNeverArmed_evenWithAFutureSlot
MeshWeaver.Hosting.Monolith.Test.ScheduledPostWatcherTest ‑ ArmedTimer_RecordsTheIdentityThatScheduledThePost
MeshWeaver.Hosting.Monolith.Test.ScheduledPostWatcherTest ‑ ProjectionCarriesTheIdentity
MeshWeaver.Hosting.Monolith.Test.ScheduledPostWatcherTest ‑ PublishingAPostByHand_CancelsItsArmedTimer
MeshWeaver.Hosting.Monolith.Test.ScheduledPostWatcherTest ‑ ReschedulingAPost_movesItsTimer_ratherThanAddingASecond
MeshWeaver.Hosting.Monolith.Test.ScheduledPostWatcherTest ‑ ScheduledPost_getsATimerArmedForItsSlot
…

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Aug 25, 2026 •

Copy link
Copy Markdown
Contributor

Test Results

    55 files  ±0      55 suites  ±0   54m 36s ⏱️ + 1m 12s
11 482 tests +1  11 177 ✅ +2  305 💤 ±0  0 ❌  - 1 
11 991 runs  +2  11 686 ✅ +3  305 💤 ±0  0 ❌  - 1 

Results for commit 90735c6. ± Comparison against base commit b7673a1.

♻️ This comment has been updated with latest results.

@rbuergi
rbuergi changed the base branch from feat/require-prebuilt to main August 25, 2026 13:52
@rbuergi rbuergi closed this Aug 25, 2026
@rbuergi rbuergi reopened this Aug 25, 2026
@rbuergi
rbuergi merged commit 4f0e3f1 into main Aug 25, 2026
25 checks passed
@rbuergi
rbuergi deleted the feat/require-prebuilt-park branch August 28, 2026 08:56
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