The ToTask ratchet can fail again

ObservableToTaskBridgeGuard is the ratchet that keeps .ToTask( — the bridge that resumes an awaiter inline on the signalling thread — from coming back. It reads a seeded inventory of known call sites and fails on a new file, a raised count, or a raised total.

It was seeded before the conversion waves landed and never re-seeded afterwards. So it budgeted 1,548 allowances against an actual 2, and listed 19 memex/ files that had since gone to zero. A ratchet with 1,535 allowances of slack does not ratchet: someone could have added a thousand new bridges and every gate would have stayed green.

What changed

Two more ratchets were carrying the same rot

The same sweep found allow-list entries for files that no longer exist — every one of them moved to MeshWeaver.Plugins with the AI and Orleans exits, and the entry stayed behind as free budget:

ratchet stale entries budget
BlockingBridgeSites 4 files (Content, 2 × Orleans, PostgreSql) 46 → 38
ImpersonationScopeSites 1 file (MeshWeaver.AI/ChatClientCredentialResolver) 77 → 75

An allow entry goes stale the moment its subject's move merges, and a stale entry is indistinguishable from a live one — it just quietly raises the ceiling.

How this was verified

Not by the guard passing — a guard that cannot fail passes too. By injecting a violation and watching it fail: one .ToTask( added to a memex/ file (which the old configuration would have absorbed silently) and one added to a test/ file outside the inventory. Both went red, naming the file. Then both were reverted and the guard went green again.

Reconnecting…
The server was updated. Reloading the page to pick up the latest version.