Found and measured during cloud#1219 (the consumer-side fallout of #5491's member_default wildcard removal). Filed unassigned as a finding; the maintainer's cloud#1219 ruling (2026-08-10) names this as the upstream half that must exist for the migration prescription to be testable.
The fact
#5491's Migration section prescribes: "Ship an app default profile. Mark a permission set isDefault: true…". The CLI honors it — packages/cli/src/commands/serve.ts:2008 reads appDefaultPermissionSetName(config.permissions) and passes new SecurityPlugin({ fallbackPermissionSet }).
The verify harness does not: packages/verify/src/harness.ts constructs a vanilla new SecurityPlugin() and never reads config.permissions.
Verified empirically on cloud's apps/ee-group-showcase (cloud#1219): adding definePermissionSet({ isDefault: true, … }) + permissions: to the app changed nothing — the same 6 of 37 acceptance cases still failed at the object gate.
The consequence
Any dogfood app that follows #5491's own migration prescription cannot see its declared baseline take effect under bootStack — the only workaround is hand-constructing a SecurityPlugin in each suite, which is itself the "custom security code" the dogfood posture forbids. The prescribed migration is therefore untestable through the harness that exists to test app postures.
Suggested shape (for triage, not binding)
verify's harness resolves the app default profile the same way serve.ts does — one shared resolution helper, so the two cannot drift. A pin: an app declaring an isDefault set must observe it enforced under bootStack.
Refs: cloud#1219 (measurement + ruling), #5491 / #5492 (the narrowing and its migration prescription), cloud#880 / #3541 (ADR-0105 dogfood posture).
Found and measured during cloud#1219 (the consumer-side fallout of #5491's
member_defaultwildcard removal). Filed unassigned as a finding; the maintainer's cloud#1219 ruling (2026-08-10) names this as the upstream half that must exist for the migration prescription to be testable.The fact
#5491's Migration section prescribes: "Ship an app default profile. Mark a permission set
isDefault: true…". The CLI honors it —packages/cli/src/commands/serve.ts:2008readsappDefaultPermissionSetName(config.permissions)and passesnew SecurityPlugin({ fallbackPermissionSet }).The verify harness does not:
packages/verify/src/harness.tsconstructs a vanillanew SecurityPlugin()and never readsconfig.permissions.Verified empirically on cloud's
apps/ee-group-showcase(cloud#1219): addingdefinePermissionSet({ isDefault: true, … })+permissions:to the app changed nothing — the same 6 of 37 acceptance cases still failed at the object gate.The consequence
Any dogfood app that follows #5491's own migration prescription cannot see its declared baseline take effect under
bootStack— the only workaround is hand-constructing aSecurityPluginin each suite, which is itself the "custom security code" the dogfood posture forbids. The prescribed migration is therefore untestable through the harness that exists to test app postures.Suggested shape (for triage, not binding)
verify's harness resolves the app default profile the same wayserve.tsdoes — one shared resolution helper, so the two cannot drift. A pin: an app declaring anisDefaultset must observe it enforced underbootStack.Refs: cloud#1219 (measurement + ruling), #5491 / #5492 (the narrowing and its migration prescription), cloud#880 / #3541 (ADR-0105 dogfood posture).