FLS2 — snapshot DEFAULTS mirror entity-level permissions (2.2), and enabling changed no
behavior (2.3): the Writer role (read+create+update) gets Allow/Allow/Allow on every WRITABLE
field, the read-only Reader role gets Allow/No Access/No Access, and the reader user's visible
column set is still complete — a live RunView returns Email.
The snapshot is uniform per (role x writability), NOT per role. A READ-ONLY field — a joined
foreign-key display column, a computed column — cannot be written through the API by anyone, so
reconciliation authors No Access on its two write verbs rather than an Allow that could
never decide anything. Asserting a single uniform shape per role would demand exactly the inert
grant the snapshot deliberately withholds, so the split is asserted here instead: it is the
stronger statement of the two.
FLS2 — snapshot DEFAULTS mirror entity-level permissions (2.2), and enabling changed no behavior (2.3): the Writer role (read+create+update) gets Allow/Allow/Allow on every WRITABLE field, the read-only Reader role gets Allow/No Access/No Access, and the reader user's visible column set is still complete — a live RunView returns Email.
The snapshot is uniform per (role x writability), NOT per role. A READ-ONLY field — a joined foreign-key display column, a computed column — cannot be written through the API by anyone, so reconciliation authors
No Accesson its two write verbs rather than anAllowthat could never decide anything. Asserting a single uniform shape per role would demand exactly the inert grant the snapshot deliberately withholds, so the split is asserted here instead: it is the stronger statement of the two.