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.