Cutting by module role does not remove the source either¶
scripts/module_split.py, datasets/results/module-split.json. PFAdapter (Liu, Yang, Wang, Yang,
Hao, Zhang, Liu and Zhou, IEEE TCCN, arXiv:2607.12111, 13 July 2026, read from the PDF) cuts the
adapter by the role of the projection: "query and key projections are assigned to global
synchronization ... while value and output projections remain localized", and transmits only the
global-shared set, halving traffic. The geometry already stores a cosine matrix per adapted module,
and a mean of positive semi-definite matrices is positive semi-definite, so any subset of the 196
modules is scored directly as the Gram matrix of unit vectors.
43 C++ clients, detector AUC with the reference split over projects:
| cut | modules | attribution | AOSP | Qt |
|---|---|---|---|---|
| PFAdapter transmits (q, k) | 56 | 0.395 | 0.702 | 0.583 |
| PFAdapter keeps local (v, o) | 56 | 0.395 | 0.754 | 0.669 |
| attention, all four | 112 | 0.395 | 0.735 | 0.628 |
| MLP, all three | 84 | 0.395 | 0.732 | 0.627 |
| everything | 196 | 0.395 | 0.735 | 0.628 |
| q_proj alone | 28 | 0.442 | 0.700 | 0.589 |
| v_proj alone | 28 | 0.372 | 0.755 | 0.657 |
The source is redundantly encoded across module roles. What PFAdapter transmits carries almost the whole signal: AOSP at 0.702 against 0.735 for the complete update. The set it keeps local is slightly the more identifying of the two, at 0.754, but withholding it removes almost nothing from what the server already has. Every single projection type, alone, detects AOSP between 0.700 and 0.755.
The attribution column reading 0.395 for five different cuts is a coincidence of count, not a bug: the matrices differ (mean off-diagonal cosine 0.229 for q and k against 0.334 for v and o, largest entrywise difference 0.152), and the q,k cut gets a different pair of clients right than the full update does. The nearest-class rule is simply coarse at 43 clients, which is the classification operating point this study already reports as uninformative. The detector is what separates the cuts.