diff --git a/src/GameCult.Caching/CultCache.cs b/src/GameCult.Caching/CultCache.cs
index b386be0c..48bad3a3 100644
--- a/src/GameCult.Caching/CultCache.cs
+++ b/src/GameCult.Caching/CultCache.cs
@@ -2669,8 +2669,8 @@ namespace GameCult.Caching
/// Whether a removal of the key, or a write of the record's own type, would be let through: the write's own decision, asked of
/// the record the cache holds. False when no attached store is home to the record's type, when its home store is read-only, or
/// when that store holds it unowned (undeclared drift that drops persisted slots, or a payload carrying slots past this build's,
- /// see ). For a key the cache does not hold, false only when a store lists it
- /// foreign. One write it does not predict: a Flatten of a variant whose base chain holds an unowned record is refused, though
+ /// see ). For a key the cache does not hold, the removal check every store makes of it
+ /// (false when a store lists it foreign). One write it does not predict: a Flatten of a variant whose base chain holds an unowned record is refused, though
/// the variant itself is writable. Live and advisory: the write still decides.
///
public bool IsWritable(CultRecordKey key)
@@ -2678,7 +2678,7 @@ namespace GameCult.Caching
lock (Gate())
return _entries.TryGetValue(key.Value, out var held)
? WriteRefusal(held, upsert: false, null, out _) == null
- : _stores.All(entry => entry.Store.ForeignRecords.All(record => !string.Equals(record.Key, key.Value, StringComparison.Ordinal)));
+ : _stores.All(entry => entry.Store.Refusal(key.Value, null) == null);
}
public object? Get(CultRecordKey key)