Symptom
Setup › Advanced › Signing Keys (JWKS) can never load, for any persona.
sys_jwks declares enable.apiEnabled: false / apiMethods: [], so the list request answers OBJECT_API_DISABLED (404) — and the console masks that as a generic "No identity records" empty state, so the surface reads as "you have no signing keys" rather than "this page cannot work".
Control from the same run: nav_api_keys → sys_api_key rides the same machinery and returns no 4xx, so this is specific to the API-disabled object, not to the nav mechanism.
Root cause
The nav entry is contributed with only a requiredPermissions gate, and a permission gate cannot prune an API-disabled object. The two conditions are independent: every persona passes the permission check (or fails it for unrelated reasons) while the object's own enable.apiEnabled: false makes the destination unreachable regardless. There is no signal on the entry that the server could use to drop it.
Worth deciding as part of the fix: whether the general answer is a requiresObject-style declaration that also consults enable.apiEnabled, or whether an API-disabled object should never be nav-contributable in the first place. Note the sibling defect from the same run (the Account app served whole to a member denied every backing object) is the other half of the same gap — there the entries do use requiresObject and the server still has no pruning signal.
Reproduction
- Boot the showcase and sign in as admin (the defect is persona-independent; admin is simply the easiest).
- Navigate to Setup › Advanced › Signing Keys (JWKS).
- Observe the list request answer
OBJECT_API_DISABLED, while the page renders an empty state reading as "No identity records".
- Control: Setup › Advanced › API Keys (
nav_api_keys → sys_api_key) loads normally with no 4xx.
Source
Extracted from the QA run #7514 (builtin-apps-nav-render, framework a86db175, vendored console 09987b68).
Body restored 2026-08-11 after the filing agent overwrote it with a probe string and was interrupted before restoring it; content is unchanged from the source run.
Symptom
Setup › Advanced › Signing Keys (JWKS) can never load, for any persona.
sys_jwksdeclaresenable.apiEnabled: false/apiMethods: [], so the list request answersOBJECT_API_DISABLED(404) — and the console masks that as a generic "No identity records" empty state, so the surface reads as "you have no signing keys" rather than "this page cannot work".Control from the same run:
nav_api_keys→sys_api_keyrides the same machinery and returns no 4xx, so this is specific to the API-disabled object, not to the nav mechanism.Root cause
The nav entry is contributed with only a
requiredPermissionsgate, and a permission gate cannot prune an API-disabled object. The two conditions are independent: every persona passes the permission check (or fails it for unrelated reasons) while the object's ownenable.apiEnabled: falsemakes the destination unreachable regardless. There is no signal on the entry that the server could use to drop it.Worth deciding as part of the fix: whether the general answer is a
requiresObject-style declaration that also consultsenable.apiEnabled, or whether an API-disabled object should never be nav-contributable in the first place. Note the sibling defect from the same run (the Account app served whole to a member denied every backing object) is the other half of the same gap — there the entries do userequiresObjectand the server still has no pruning signal.Reproduction
OBJECT_API_DISABLED, while the page renders an empty state reading as "No identity records".nav_api_keys→sys_api_key) loads normally with no 4xx.Source
Extracted from the QA run #7514 (
builtin-apps-nav-render, frameworka86db175, vendored console09987b68).Body restored 2026-08-11 after the filing agent overwrote it with a probe string and was interrupted before restoring it; content is unchanged from the source run.