Bite 30I.3 — Support Access Lease UX and Auditability - RodrigoMattosoSilveira/EnterpriseRemoteSystems GitHub Wiki
Promotion target: Bite 30I.3 → Bite 30I
Branch: 767-bite-30i3-support-access-lease-ux-and-auditability
Committed SHA: 6e9a4d289d8825e388e5d252034a9eb0b4852164
This manual suite validates the user-facing and auditability behavior introduced by Bite 30I.3 — Support Access Lease UX and Auditability after all local and CI automated tests have passed.
The suite specifically validates that:
- a GLOBAL Application Administrator can request a fixed-expiration, permission-scoped Tenant Support Access Lease through ERS UI;
- the request permission catalog is backend-owned and does not expose application-control-plane or Tenant Administrator authority;
- only the exact Tenant Administrator sees and can approve or terminate that Tenant's lease;
- a lease-backed Application Administrator remains the same APPLICATION-scoped Actor and receives only the explicitly approved Tenant permissions;
- the active Lease ID and expiration remain visibly attributable while the Administrator moves through Tenant workspaces;
- Support access lifecycle control is not available from the leased Tenant context;
- authorized Tenant requests are recorded as
support_access.useagainst the exact Lease ID; - denied Tenant requests made under an active lease are also attributable to that exact Lease ID;
- Tenant Administrators can inspect lease-specific support audit history without receiving general application-wide Audit Log access;
- the GLOBAL Application Administrator can filter the general Authorization Audit Log by Support Lease ID;
- support leases do not create a Person, Membership, Tenant Actor, Collaborator, or Role Grant for the Application Administrator;
- immediate termination removes Tenant authorization;
- terminated and expired-request history remains retained;
- a lapsed
PENDINGrequest is visibly expired, cannot be approved, and does not block a later request.
- Use the ERS UI for every operation that the UI supports.
- Do not manually type ERS deep-link URLs as a substitute for normal navigation.
- Use the side navigation and the Administration context / Tenant selector.
- DevTools is used only once, in Test 10, because the UI correctly hides Expenses when the lease does not contain
expenses.read; an explicit denied request is required to verify denied support-audit attribution. - No SQL is required for normal execution of this promotion suite.
- Do not infer Tenant scope from Person names, nicknames, or old fixture labels. Use ERS's displayed Tenant boundary, Tenant ID, and Support Lease ID as the authoritative evidence.
- Do not infer a support lease from the presence of Tenant data alone. Use the top-bar Support access active banner and the displayed Lease ID.
- A test is PASS only when every checkbox in its PASS criteria is satisfied.
- Any condition explicitly marked PROMOTION BLOCKER blocks promotion of 30I.3 into Bite 30I until resolved.
Use three independent browser sessions so that approval/termination can occur without repeatedly signing the Application Administrator out.
Sign in as:
Login: [email protected]
Password: Local-E2E-Administrator-28D!
Expected persistent authorization identity:
Role: APPLICATION_ADMIN
Scope: APPLICATION
Global administration Tenant ID: *
The exact Actor Key may be bootstrap-admin or another already-existing GLOBAL Application Administrator Actor associated with [email protected]. Record the Actor ID and Actor Key during the preflight and use those recorded values for later comparisons.
Sign in as:
Login: [email protected]
Password: Local-E2E-Administrator-28D!
Select:
Tenant A
Tenant ID: default
Expected role:
TENANT_ADMIN
Sign in as:
Login: [email protected]
Password: Local-E2E-Administrator-28D!
Select:
Tenant B
Tenant ID: e2e-authz-admin-tenant
Tenant name: E2E Authorization Admin Boundary
Tenant code: E2EAUTHZADMIN
Expected role:
TENANT_ADMIN
Create a scratchpad and record these values exactly as ERS displays them.
| Variable | Record during | Purpose |
|---|---|---|
APP_ACTOR_ID |
Preflight | Prove the lease does not replace/create the Application Actor |
APP_ACTOR_KEY |
Preflight | Prove the Actor Key remains unchanged |
LEASE_A_ID |
Test 02 | Main approved support lease |
LEASE_A_EXPIRES |
Test 02 | Prove approval/termination do not rewrite fixed expiration |
LEASE_A_APPROVER |
Test 06 | Prove exact Tenant approval provenance |
LEASE_A_TERMINATOR |
Test 15 | Prove exact Tenant termination provenance |
LEASE_B_ID |
Test 18 | Short-expiration PENDING request |
LEASE_B_EXPIRES |
Test 18 | Verify lapsed-request UX |
LEASE_C_ID |
Test 19 | Replacement request proving lapsed PENDING no longer blocks |
Use these exact support reasons so that the test records are easy to recognize:
LEASE A reason:
Bite 30I.3 manual MAIN — support access UX and auditability
LEASE A termination reason:
Bite 30I.3 manual MAIN complete
LEASE B reason:
Bite 30I.3 manual EXPIRY — pending request must lapse
LEASE C reason:
Bite 30I.3 manual REPLACEMENT — lapsed pending no longer blocks
LEASE C termination reason:
Bite 30I.3 manual REPLACEMENT cleanup
From the repository root:
git branch --show-current
git rev-parse HEADExpected:
767-bite-30i3-support-access-lease-ux-and-auditability
6e9a4d289d8825e388e5d252034a9eb0b4852164
- [✔︎] Branch exactly matches
767-bite-30i3-support-access-lease-ux-and-auditability. - [✔︎] HEAD exactly matches
6e9a4d289d8825e388e5d252034a9eb0b4852164.
PROMOTION BLOCKER: The branch or SHA does not match.
Use the normal local backend/frontend processes.
Typical commands from separate terminals:
make local-backendand:
make local-frontendOpen ERS through the normal local browser URL.
- [✔] ERS loads normally.
- [√] Sign-in page is reachable.
- [√] No migration/startup error is present.
Do this using three separate browser sessions.
- Sign in as
[email protected]. - Open Administration context.
- Select Global administration.
- Using the side navigation, click Authentication.
- Find
[email protected]. - In Account identity boundary, record:
- Actor ID as
APP_ACTOR_ID; - Actor Key as
APP_ACTOR_KEY.
- Actor ID as
- Verify:
Person binding
None — no Person linked
- Verify:
Tenant Actor bindings
None — no Tenant Actors linked
- Verify:
Global Actor bindings
1
- Sign in as
[email protected]. - Open the Tenant selector.
- Select Tenant A (
default). - Verify the selected Tenant is displayed.
- Sign in as
[email protected]. - Open the Tenant selector.
- Select E2E Authorization Admin Boundary (
e2e-authz-admin-tenant). - Verify that Tenant is displayed.
- [√] Session A is authenticated as the Application Administrator.
- [√] Session A can select Global administration.
- [√]
APP_ACTOR_IDis recorded. - [√]
APP_ACTOR_KEYis recorded. - [√] Session B is authenticated as Tenant A Administrator.
- [√] Session B has Tenant A selected.
- [√] Session C is authenticated as Tenant B Administrator.
- [√] Session C has Tenant B selected.
This test suite must begin without an unexpired PENDING or effective APPROVED lease for the Application Administrator against Tenant A.
- √ Select Global administration.
- √ Using the side navigation, click Support access.
- √ In Lease history, set:
- Tenant = Tenant A;
-
Status =
Pending.
- √ Inspect the visible cards.
- √ Change Status to
Approved. - √ Inspect the visible cards.
Continue to Test 01.
In Session B:
- Ensure Tenant A is selected.
- Click Support access.
- Find that lease.
- Enter:
Preflight cleanup before Bite 30I.3 manual suite
in Immediate termination reason.
5. Click Terminate immediately.
6. Verify the lease becomes TERMINATED.
In Session B:
- Ensure Tenant A is selected.
- Click Support access.
- Find the pending lease.
- Click Approve support access.
- After it becomes
APPROVED, enter:
Preflight cleanup before Bite 30I.3 manual suite
- Click Terminate immediately.
- Verify the lease becomes
TERMINATED.
- No unexpired
PENDINGTenant A lease remains open for the Application Administrator. - No effective
APPROVEDTenant A lease remains open for the Application Administrator.
PROMOTION BLOCKER: The UI cannot bring the deterministic local fixture to a state where no open Tenant A lease remains.
Verify the 30I.3 Support access control plane is visible from Global administration, presents a backend-owned Tenant permission catalog, and does not offer application-control-plane authority as leaseable permissions.
Browser Session A
Login: [email protected]
Role: APPLICATION_ADMIN
Administration context: Global administration
- √ In Session A, open Administration context.
- √ Select Global administration.
- √ Verify Global administration is displayed.
- √ Inspect the side navigation.
- √ Verify Support access is visible.
- √ Verify Audit logs is visible.
- √ Click Support access.
- √ Verify the page heading is:
Support access
- √ Verify the introductory text states that support access does not create:
Tenant Actor
Person
Membership
Collaborator
Role Grant
- √ Verify the page contains:
Request Tenant support access
- √ Verify the request form contains:
- Tenant;
- Fixed expiration;
- Support reason / case;
- Requested Tenant permissions.
- √ Without choosing a Tenant or permission, verify Request support access is disabled.
- √ Inspect the permission catalog.
- Find:
√ Read people
√ people.read
- Find:
√ Read reference data
√ reference_data.read
- √ Verify the text says:
This catalog is supplied by the backend allowlist.
Control-plane and Tenant Administrator authority cannot be leased.
- √ Scan the permission catalog and verify it does not offer:
-
authz.manage; -
authz.read; -
support_access_leases.request; -
support_access_leases.approve; -
support_access_leases.terminate; -
TENANT_ADMIN; - wildcard
*.
-
- √ Verify Lease history is present.
- √ Verify the history controls include:
- Tenant;
- Status;
- Refresh.
The GLOBAL Application Administrator has a dedicated request/history workspace. Permission scope is chosen from an explicit Tenant-data allowlist; application-control-plane and Tenant Administrator authority are not leaseable.
- [√] Support access is visible in Global administration.
- [√] Request form is present.
- [√]
people.readis present. - [√]
reference_data.readis present. - [√]
authz.manageis not offered. - [√] No
support_access_leases.*control-plane permission is offered. - [√] No
TENANT_ADMINauthority is offered. - [√] Request button is disabled until required fields and at least one permission are selected.
- [√] Lease history is present.
PROMOTION BLOCKER: The request catalog exposes application-control-plane, wildcard, or Tenant Administrator authority.
Create the main Test Lease through the 30I.3 UI and verify its immutable request evidence.
Test 01 passed. Preflight confirmed no open Tenant A lease.
Browser Session A
Login: [email protected]
Administration context: Global administration
- √ Navigate through the side menu to Support access.
- √ Under Request Tenant support access, open Tenant.
- √ Select Tenant A — the Tenant whose ID is
default. - √ In Fixed expiration, set a time approximately 60 minutes in the future.
- √ Make sure the selected expiration is at least 45 minutes in the future so the suite has sufficient time.
- √ Copy the displayed expiration to your scratchpad as
LEASE_A_EXPIRES. - √ In Support reason / case, enter exactly:
Bite 30I.3 manual MAIN — support access UX and auditability
- √ Under Requested Tenant permissions, select only:
-
Read people —
people.read; -
Read reference data —
reference_data.read.
-
Read people —
- √ Verify
expenses.readis not selected. - √ Verify
people.createis not selected. - √ Click Request support access.
- √ Wait for Lease history to refresh. 13.√ Locate the newest card whose reason is:
Bite 30I.3 manual MAIN — support access UX and auditability
- √ Verify the card status is:
PENDING
- √ Record the displayed Lease ID as
LEASE_A_ID. - √ Verify:
Tenant ID: default
- √ Verify Application Actor is the same existing Application Actor associated with
APP_ACTOR_ID. - √ Verify Support reason exactly matches the requested reason.
- √ Verify Immutable permission scope contains exactly:
-
people.read; -
reference_data.read.
-
- √ Verify Fixed expiration corresponds to
LEASE_A_EXPIRES. - √ Verify Approved by is
—. - √ Verify Terminated by is
—. - √ Verify no Approve support access button is offered to the Application Administrator.
- √ Verify no Terminate immediately control is offered to the Application Administrator.
One retained PENDING lease is created for exactly Tenant A and the existing GLOBAL Application Administrator Actor. The request fields are visible as retained evidence.
- [√] One
PENDINGLease A exists. - [√]
LEASE_A_IDis recorded. - [√] Tenant ID is
default. - [√] Application Actor is the existing Application Actor.
- [√] Reason is exact.
- [√] Permission set contains exactly
people.readandreference_data.read. - [√] Fixed expiration matches the requested expiration.
- [√] Application Administrator cannot approve the request.
- [√] Application Administrator cannot terminate the pending request.
PROMOTION BLOCKER: Requesting support access creates a different Actor or grants permissions not explicitly selected.
Verify 30I.3 surfaces the existing 30I.2 open-lease conflict and exposes request audit evidence.
Browser Session A
Login: [email protected]
Administration context: Global administration
- √ Remain on Support access.
- √ Re-enter/select the same Tenant A values if the form no longer contains them.
- √ Use a future expiration.
- Enter any reason, for example:
Bite 30I.3 manual duplicate-open-lease probe
5.√ Select people.read.
6. √ Click Request support access.
7. √ Verify ERS displays an error equivalent to:
An open Tenant Support Access Lease already exists for this Application Administrator and Tenant
- √ In Lease history, verify no second open Tenant A lease was created.
- √ Find the
LEASE_A_IDcard. - √ Click Review audit trail.
- √ Verify the table heading:
Lease audit trail
- √ Verify an event exists with:
Decision: AUTHORIZED
Operation: support_access_leases.request
- √ Verify the operation shows permission:
support_access_leases.request
- √ Verify the Request column shows:
POST /api/v1/authz/support-access-leases
- √ Verify the audit Actor corresponds to the existing Application Administrator Actor.
- [√] Duplicate open request is rejected.
- [√] No second open Tenant A lease is created.
- [√] Lease A audit trail is visible to the GLOBAL Application Administrator.
- [√]
support_access_leases.requestis recorded asAUTHORIZED. - [√] Request method/path are retained.
PROMOTION BLOCKER: A duplicate open lease is silently created, or the successful request has no lease-specific audit event.
Verify lease history and lifecycle authority are exact-Tenant scoped.
Browser Session C
Login: [email protected]
Tenant: E2E Authorization Admin Boundary
Tenant ID: e2e-authz-admin-tenant
Role: TENANT_ADMIN
- √ Ensure Tenant B is selected.
- √ Verify the selected Tenant is E2E Authorization Admin Boundary.
- I√ nspect side navigation.
- √ Verify Support access is visible.
- √ Click Support access.
- √ Verify the page displays a Tenant boundary corresponding to Tenant B.
- √ Verify the displayed Tenant ID is:
e2e-authz-admin-tenant
- √ Verify Request Tenant support access is not displayed.
- √ Inspect Lease history.
- √ Verify
LEASE_A_IDis not present. - √ Verify the reason:
Bite 30I.3 manual MAIN — support access UX and auditability
is not present. √ 12. Inspect side navigation. √ 13. Verify general Audit logs is not offered to this Tenant Administrator.
Tenant B Administrator sees only Tenant B support-access history and cannot request leases or inspect Tenant A's Lease A.
- [√] Tenant boundary is Tenant B.
- [√] Tenant B Administrator has no request form.
- [√] Lease A is absent.
- [√] Tenant B Administrator does not have general Audit Logs navigation.
PROMOTION BLOCKER: Tenant B Administrator can see, approve, terminate, or audit Tenant A's Lease A.
Verify the exact Tenant Administrator receives the request with enough immutable evidence to make the approval decision.
Browser Session B
Login: [email protected]
Tenant: Tenant A
Tenant ID: default
Role: TENANT_ADMIN
- √ Ensure Tenant A (
default) is selected. - √ Click Support access in side navigation.
- √ Verify the page displays Tenant A's Tenant boundary.
- √ Verify:
Tenant ID: default
- √ Verify Request Tenant support access is not displayed.
- √ Locate
LEASE_A_ID. - √ Verify status:
PENDING
- √ Verify Application Actor corresponds to the recorded Application Administrator Actor.
- √ Verify the support reason is exactly:
Bite 30I.3 manual MAIN — support access UX and auditability
- √ Verify Fixed expiration corresponds to
LEASE_A_EXPIRES. - √ Verify Immutable permission scope displays:
- label Read people and code
people.read; - label Read reference data and code
reference_data.read.
- label Read people and code
- √ Verify no
expenses.readpermission is present. - √ Verify Approve support access is visible.
- √ Click Review audit trail.
- √ Verify the
support_access_leases.requestaudit event from Test 03 is visible. - √ Verify the page does not offer a cross-Tenant Tenant filter; the Tenant boundary is fixed by the selected Tenant Administrator context.
- √ Verify general Audit logs is not present in side navigation.
- [√] Exact Tenant A Administrator sees Lease A.
- [√] Request evidence is complete.
- [√] Immutable permission scope is understandable by label and code.
- [√] Approval action is available.
- [√] Lease-specific audit trail works.
- [√] General application Audit Logs access is absent.
PROMOTION BLOCKER: A Tenant Administrator must guess the requested permission scope, or receives general application audit authority.
Verify exact-Tenant approval, approval audit attribution, and immutable expiration.
Test 05 passed.
Browser Session B
Login: [email protected]
Tenant ID: default
- √ On Support access, locate
LEASE_A_ID. - √ Re-confirm its status is
PENDING. - √ Re-confirm its Fixed expiration matches
LEASE_A_EXPIRES. - √ Click Approve support access.
- √ Wait for the lease card to refresh.
- √ Verify the effective status becomes:
APPROVED
- √ Verify Approved by is no longer
—. - √ Record the displayed approving Actor ID as
LEASE_A_APPROVER. - √ Verify the Fixed expiration did not change and still matches
LEASE_A_EXPIRES. - √ Verify the immutable permission scope remains exactly:
-
people.read; -
reference_data.read.
-
- √ Verify Approve support access is no longer displayed.
- √ Verify the Immediate termination reason field is now displayed.
- √ With the termination-reason field empty, verify Terminate immediately is disabled.
- √ Open Lease audit trail if it is not already open. 15.√ Verify the audit trail contains both:
support_access_leases.request
support_access_leases.approve
- √ Verify the approval event is
AUTHORIZED. - Verify the approval request shows:
POST /api/v1/authz/support-access-leases/<LEASE_A_ID>/approve
- Lease A becomes
APPROVED. - Approver Actor is recorded.
- Fixed expiration is unchanged.
- Permission scope is unchanged.
- Approval audit event is present.
- Termination requires a reason.
PROMOTION BLOCKER: Approval extends the lease expiration, changes permissions, or lacks approver/audit provenance.
Verify an approved lease creates a selectable Tenant support context without creating a Tenant Actor.
Browser Session A
Login: [email protected]
Start in: Global administration
- √ Refresh Session A's ERS browser window so the account's available contexts are reloaded.
- √ Verify Global administration remains available.
- √ Open Administration context.
- √ Verify a Tenant A context is now available. 5.√ Verify Tenant B is not newly available merely because Tenant A Lease A was approved.
- √ Select Tenant A.
- √ Wait for the workspace to load.
- √ Verify the Administration context shows Tenant A.
- √ In the top bar, verify a visible amber panel says:
Support access active
- √ Verify that panel displays
LEASE_A_ID. 11.√ Verify the panel displays an expiration corresponding toLEASE_A_EXPIRES. - √ Inspect side navigation.
- √ Verify Support access is hidden while this lease-backed Tenant context is selected.
The existing Application Administrator Account gains a temporary selectable Tenant context backed by LEASE_A_ID. ERS visibly identifies the lease on every workspace page.
- Tenant A becomes selectable only after approval.
- Tenant B is not granted by Tenant A Lease A.
- Support access active is visible.
- Displayed Lease ID equals
LEASE_A_ID. - Displayed expiration matches Lease A.
- Support access lifecycle navigation is hidden in the lease-backed context.
PROMOTION BLOCKER: The lease is active but the UI does not disclose the Lease ID, or a lease for Tenant A authorizes Tenant B.
Verify lease-backed Tenant operation remains separate from Global administration and a control-plane denial does not destroy the active lease.
Browser Session A
Login: [email protected]
Administration context: Tenant A through LEASE_A_ID
- √ Verify the top bar still shows Support access active with
LEASE_A_ID. - √ Verify Support access is not present in side navigation.
- √ Inspect the side navigation for Audit logs. 4.√ If Audit logs is visible, click it.
- √ Verify the global audit data does not load in the leased Tenant context.
- √ The allowed denial presentation is:
Access forbidden
Your current authorization context does not permit this operation.
- √ Verify the top bar still shows Support access active with
LEASE_A_ID. - √ Click People in side navigation.
- √ Verify People loads normally again under the same lease.
- √ Re-verify the same
LEASE_A_IDremains displayed.
If Audit logs is already hidden in Step 3, treat that as equivalent control-plane suppression and continue with Steps 7–10.
- Lease-backed context cannot read the global Audit Log Viewer.
- A denied control-plane attempt does not terminate or lose Lease A.
- People remains usable afterward under the same Lease ID.
PROMOTION BLOCKER: Selecting a leased Tenant grants global Audit Log access, or a denied control-plane action causes the valid lease to disappear.
Verify Tenant data access works through the lease, stays within Tenant A, and the page exposes the exact lease provenance.
Browser Session A
Login: [email protected]
Administration context: Tenant A through LEASE_A_ID
- Click People in side navigation.
- Wait for the page to finish loading.
- Locate People tenant boundary.
- Verify it identifies Tenant A.
- Verify:
Tenant ID: default
- Verify the badge:
Tenant Support Access Lease
- Verify:
Support Lease ID: <LEASE_A_ID>
- Verify the People directory and filters load.
- Verify at least one Tenant A Person record is displayed if the local fixture contains People.
- Do not use a Person's nickname as Tenant evidence; use the People tenant boundary.
- Verify New Person is absent because Lease A does not include
people.create. - Verify the top bar still displays Support access active with
LEASE_A_ID.
- People loads under Tenant A.
- Tenant ID
defaultis explicit. -
LEASE_A_IDis explicit. - Read-only scope is respected: no
people.createUI. - Lease remains visible after navigation.
PROMOTION BLOCKER: People data loads without Tenant/Lease provenance, or unleased write authority appears.
Create one deliberate denied support request so that 30I.3 denied-audit attribution can be verified.
Lease A intentionally does not contain expenses.read. Correct UI behavior therefore hides the Expenses side-navigation item. Because the UI prevents the forbidden action, DevTools is used once to generate a controlled denied request.
Browser Session A
Login: [email protected]
Administration context: Tenant A through LEASE_A_ID
- √ Verify Support access active shows
LEASE_A_ID. - √ Inspect side navigation.
- √ Verify Expenses is not displayed.
- √ Verify People remains displayed.
- Open browser DevTools → Console.
- Paste this entire block without editing it:
const response30i3 = await fetch(
"/api/v1/expenses?page=1&pageSize=1",
{
credentials: "include",
headers: {
"X-Tenant-ID": "default"
}
}
);
const payload30i3 = await response30i3.json().catch(() => null);
console.log({
status: response30i3.status,
ok: response30i3.ok,
payload: payload30i3
});- √ Verify the console result contains:
status: 403
ok: false
- √ Verify the error code is:
forbidden
- √ Close DevTools.
- √ Return to ERS.
- √ Verify the top bar still shows Support access active with
LEASE_A_ID. - √ Click People.
- √ Verify People still loads under Lease A.
- Expenses is not offered in the UI.
- Forced Expenses request receives HTTP 403.
- Lease A remains active afterward.
- People remains authorized afterward.
PROMOTION BLOCKER: The request succeeds without expenses.read, or the denied request destroys an otherwise valid lease.
Verify exact-Tenant audit review includes lifecycle events plus actual authorized/denied support use.
Browser Session B
Login: [email protected]
Tenant ID: default
- √ Click Support access.
- √ Find
LEASE_A_ID. - √ Verify it remains
APPROVED. - √ Click Review audit trail.
- √ Verify lifecycle events include:
-
support_access_leases.request; -
support_access_leases.approve.
-
- √ Find at least one event with:
Operation: support_access.use
Decision: AUTHORIZED
Permission: people.read
7.√ Verify its Request column identifies a People request, such as:
GET /api/v1/people
or a People request path with query parameters omitted from the displayed path.
8. √ If reference_data.read generated an additional authorized event, verify it is also attributed to Lease A; this additional event is allowed but not required for PASS.
9. √ Find an event with:
Operation: support_access.use
Decision: DENIED
Permission: expenses.read
10.√ Verify its Request column identifies:
GET /api/v1/expenses
- √ Verify the audit events show the Application Administrator's existing Actor identity rather than a synthetic Tenant Actor.
- Authorized
people.readsupport use is audited. - Denied
expenses.readsupport attempt is audited. - Both are part of
LEASE_A_ID's lease audit trail. - Request method/path are visible.
- Actor identity remains the Application Administrator Actor.
PROMOTION BLOCKER: Support actions cannot be attributed to the exact lease, permission, decision, and request path.
Verify first-class supportLeaseId audit attribution is visible and filterable from the global Authorization Audit Log Viewer.
Browser Session A
Login: [email protected]
Administration context: Global administration
- √ Open Administration context.
- √ Select Global administration.
- √ Verify the Support access active banner disappears because the selected context is no longer the leased Tenant context.
- √ Click Audit logs in side navigation.
- √ Verify heading:
Audit Log Viewer
- √ Under Authenticated authorization context, verify Selected Tenant ID is:
*
- √ In Support Lease ID, enter
LEASE_A_ID. - √ Leave Operation as:
All sensitive and authorization events
- √ Leave Decision as All decisions.
- √ Click Apply Filters.
- √ Verify one or more results are shown.
- In the result rows, verify:
Support Lease: <LEASE_A_ID>
- √ Verify lifecycle operations for Lease A are included, including request and approval.
- √ Change Operation to:
Support-authorized request
- √ Change Decision to:
Denied
- √ Keep Support Lease ID =
LEASE_A_ID. - √ Click Apply Filters.
- Verify the resulting denied row includes:
- raw operation
support_access.use; - permission
expenses.read; -
Support Lease =
LEASE_A_ID; - request
GET /api/v1/expenses; - decision
DENIED.
- raw operation
- √ Change Decision to Authorized and apply filters.
- √ Verify an authorized support row includes:
- raw operation
support_access.use; - permission
people.read; -
Support Lease =
LEASE_A_ID; - decision
AUTHORIZED.
- raw operation
- √ Click Reset.
- Support Lease ID is an explicit filter.
- Lease A events are returned when filtering by
LEASE_A_ID. - Audit rows display the Support Lease ID.
- Authorized and denied support use can be distinguished.
- Permission and request path evidence are visible.
PROMOTION BLOCKER: Global audit cannot isolate activity by Support Lease ID.
Re-verify the permanent identity boundary after request, approval, and Tenant use.
Browser Session A
Login: [email protected]
Administration context: Global administration
- √ Click Authentication in side navigation.
- √ Find
[email protected]. - √ Verify Actor ID still equals recorded
APP_ACTOR_ID. - √ Verify Actor Key still equals recorded
APP_ACTOR_KEY. 5.√ In Account identity boundary, verify:
Person binding
None — no Person linked
- √ Verify:
Tenant Actor bindings
None — no Tenant Actors linked
- √ Verify:
Global Actor bindings
1
- √ Verify no new Tenant A Actor is listed for the account.
- √ Verify no Person has appeared merely because Lease A was requested/approved/used.
- Actor ID unchanged.
- Actor Key unchanged.
- No Person binding.
- No Tenant Actor binding.
- x ] Exactly one Global Actor binding.
PROMOTION BLOCKER: Support access materializes permanent Tenant identity for the Application Administrator.
Verify global history filtering works and lifecycle buttons remain restricted to the exact Tenant Administrator.
Browser Session A
Login: [email protected]
Administration context: Global administration
- √ Click Support access.
- √ In Lease history, set Tenant to Tenant A.
- Set Status to:
Approved
- √ Verify
LEASE_A_IDis displayed. - √ Verify its reason and permission scope are unchanged.
- √ Verify the Application Administrator still does not have:
- Approve support access;
- Terminate immediately.
- √ Change Tenant to Tenant B.
- √ Verify
LEASE_A_IDdisappears. - C √ hange Tenant back to Tenant A.
- √ Change Status to
Pending. - √ Verify
LEASE_A_IDis not shown as PENDING. - √ Set Status back to
Approved. - √ Verify
LEASE_A_IDreturns.
- Tenant filter isolates Tenant A history.
- Status filter distinguishes APPROVED from PENDING.
- Global Application Administrator cannot perform Tenant approval/termination actions.
PROMOTION BLOCKER: The global requester can approve or terminate its own lease.
Verify explicit immediate termination, required reason, retained termination evidence, and unchanged fixed expiration.
Before terminating the lease:
- √ In Session A, select Tenant A through
LEASE_A_ID. - √ Click People.
- √ Verify Support access active still displays
LEASE_A_ID. - √ Leave this browser window open on People.
Browser Session B
Login: [email protected]
Tenant ID: default
- √ Click Support access.
- √ Find
LEASE_A_ID. - √ Verify it is
APPROVED. - √ Verify Immediate termination reason is displayed.
- √ With the reason field empty, verify Terminate immediately is disabled.
- Bite 30I.3 manual MAIN completeEnter exactly:
Bite 30I.3 manual MAIN complete
- √ Bite 30I.3 manual MAIN completeClick Terminate immediately.
- √ Wait for the lease card to refresh.
- √ Verify status:
TERMINATED
- √ Verify Terminated by is no longer
—. - √ Record it as
LEASE_A_TERMINATOR. - √ Verify Termination reason is exactly:
Bite 30I.3 manual MAIN complete
- √ Verify Fixed expiration still corresponds to
LEASE_A_EXPIRES. - √ Verify the immutable permission scope still contains exactly:
-
people.read; -
reference_data.read.
-
- √ Click Review audit trail.
- √ Verify an
AUTHORIZEDevent exists for:
support_access_leases.terminate
- √ Verify the request path identifies:
POST /api/v1/authz/support-access-leases/<LEASE_A_ID>/terminate
- Termination cannot be submitted without a reason.
- Lease becomes TERMINATED.
- Terminator Actor is recorded.
- Termination reason is retained.
- Fixed expiration remains unchanged.
- Permission scope remains unchanged.
- Termination audit event is present.
PROMOTION BLOCKER: Termination changes request evidence or is not attributable to the terminating Tenant Administrator.
Verify terminated Lease A no longer authorizes Tenant A and the Application Administrator's Global context survives.
Browser Session A was deliberately left open on Tenant A People before Test 15 terminated Lease A.
- √ Return to Session A.
- √ Refresh the browser.
- √ Wait for ERS to reload the Account's available Administration contexts.
- √ Verify the workspace no longer presents Tenant A as an active lease-backed context for Lease A.
- √ Verify Support access active with
LEASE_A_IDis no longer displayed. - √ Verify Global administration remains available.
- √ Select Global administration if ERS does not automatically fall back to it.
- √ Open Administration context.
- √ Verify Tenant A is no longer listed as an active support context, assuming no other active Tenant A lease exists.
- √ Verify Session A remains signed in.
- Terminated Lease A no longer provides Tenant A authorization.
- Lease banner disappears.
- Tenant A lease option disappears.
- Authentication session remains valid.
- Global administration remains available.
PROMOTION BLOCKER: A terminated lease continues authorizing Tenant requests or the termination destroys the Application Administrator's account session.
Verify termination does not delete or rewrite historical support evidence.
Browser Session A
Login: [email protected]
Administration context: Global administration
- √ Click Support access.
- √ In Lease history:
- Tenant = Tenant A;
-
Status =
Terminated.
- √ Verify
LEASE_A_IDis displayed. - √ Verify the original support reason remains:
Bite 30I.3 manual MAIN — support access UX and auditability
- √ Verify the original fixed expiration still matches
LEASE_A_EXPIRES. - √ Verify immutable permissions still show exactly:
-
people.read; -
reference_data.read.
-
- √ Verify Approved by remains populated.
- √ Verify Terminated by remains populated.
- √ Verify termination reason remains:
Bite 30I.3 manual MAIN complete
10.√ Verify there is no Delete action for the lease.
11. Click Review audit trail.
12. √ Verify the retained history includes:
- support_access_leases.request;
- support_access_leases.approve;
- authorized support_access.use for people.read;
- denied support_access.use for expenses.read;
- support_access_leases.terminate.
13. √ Navigate through side menu to Audit logs.
14. √ Filter by LEASE_A_ID.
15. √ Verify the same lifecycle/support-use evidence remains discoverable after termination.
- Terminated lease remains visible.
- Request evidence remains immutable.
- Approval evidence remains.
- Use evidence remains.
- Termination evidence remains.
- No delete action exists.
- Global audit filter continues finding the terminated lease's events.
PROMOTION BLOCKER: Termination removes audit history or rewrites immutable request fields.
Verify the 30I.3 UX for a PENDING request whose immutable expiration passes before approval.
Browser Session A
Login: [email protected]
Administration context: Global administration
- √ Click Support access.
- √ Confirm no open Tenant A lease currently exists.
- √ Under Request Tenant support access, select Tenant A (
default). - Set Fixed expiration to approximately 2 minutes in the future.
- Choose a value that is at least 90 seconds ahead to avoid crossing the minute boundary while filling the form.
- √ Record the displayed expiration as
LEASE_B_EXPIRES. - √ Enter exactly:
Bite 30I.3 manual EXPIRY — pending request must lapse
- √ Select only:
Read people
people.read
- √ Click Request support access.
- √ Find the new card.
- √ Verify it is
PENDING. - √ Record its ID as
LEASE_B_ID.
Browser Session B
- √ Ensure Tenant A (
default) is selected. - √ Click Support access.
- √ Find
LEASE_B_ID. - √ Before its expiration time, verify Approve support access is visible.
- √ Do not approve it.
- √ Wait until the local clock is at least 15 seconds past
LEASE_B_EXPIRES. - √ In Session B, click Refresh in Lease history.
- √ Find
LEASE_B_ID. - √ Verify the badge is:
EXPIRED
- √ Verify the card also states:
Expired request
- √ Verify the explanatory message says the pending request passed its immutable expiration and can no longer be approved.
- √ Verify Approve support access is no longer available.
Browser Session A
- √ Return to Global administration → Support access.
- √ Set:
- Tenant = Tenant A;
-
Status =
Expired.
- √ Verify
LEASE_B_IDis displayed. - √ Verify the original reason, expiration, and
people.readscope remain visible.
- Lease B starts as PENDING.
- Lease B is initially approvable by exact Tenant Admin.
- After its fixed expiration it is displayed as EXPIRED.
- Expired request cannot be approved.
- Historical request evidence remains visible.
- Expired status filter finds it.
PROMOTION BLOCKER: A lapsed PENDING request can still be approved.
Verify lapsed PENDING Lease B no longer blocks a later request for the same Application Administrator and Tenant.
Browser Session A
Login: [email protected]
Administration context: Global administration
- √ Navigate to Support access.
- √ Under Request Tenant support access, select Tenant A.
- √ Set Fixed expiration to approximately 30 minutes in the future.
- √ Enter exactly:
Bite 30I.3 manual REPLACEMENT — lapsed pending no longer blocks
- √ Select only:
Read people
people.read
- √ Click Request support access.
- √ Verify the request succeeds.
- √ Find the new
PENDINGlease. - √ Record it as
LEASE_C_ID. - √ Verify
LEASE_C_IDis different fromLEASE_B_ID.
Browser Session B
- √ Ensure Tenant A is selected.
- √ Click Support access.
- √ Find
LEASE_C_ID. - √ Verify it is
PENDING. - √ Click Approve support access.
- √ Verify it becomes
APPROVED. - In Immediate termination reason, enter:
Bite 30I.3 manual REPLACEMENT cleanup
- √ Click Terminate immediately.
- √ Verify it becomes
TERMINATED. - √ Click Review audit trail.
- √ Verify Lease C includes request, approval, and termination events.
- Expired Lease B does not block Lease C.
- Lease C has a distinct ID.
- Lease C can be approved by exact Tenant Admin.
- Lease C can be terminated with a reason.
- Lease C history is retained.
PROMOTION BLOCKER: Lapsed PENDING history permanently blocks future support requests.
Verify Tenant B still cannot see any Tenant A manual leases after the complete lifecycle/audit exercise.
Browser Session C
Login: [email protected]
Tenant ID: e2e-authz-admin-tenant
- √ Ensure E2E Authorization Admin Boundary is selected.
- √ Click Support access.
- √ Verify Tenant boundary:
Tenant ID: e2e-authz-admin-tenant
- √ Set Status to All statuses.
- √ Click Refresh.
- √ Verify none of these Lease IDs are visible:
-
LEASE_A_ID; -
LEASE_B_ID; -
LEASE_C_ID.
-
- V√ erify none of these reasons are visible:
-
Bite 30I.3 manual MAIN — support access UX and auditability; -
Bite 30I.3 manual EXPIRY — pending request must lapse; -
Bite 30I.3 manual REPLACEMENT — lapsed pending no longer blocks.
-
- √ Verify Request Tenant support access is absent.
- √ Verify general Audit logs remains absent from side navigation.
- Tenant B cannot see Tenant A lease history.
- Tenant B cannot request Application Administrator support access.
- Tenant B Tenant Administrator still lacks general application audit access.
PROMOTION BLOCKER: Any Tenant A lease or audit evidence leaks into Tenant B's Support access workspace.
Finish the suite in a clean, promotion-reviewable state and re-check permanent identity.
Browser Session A
Login: [email protected]
Administration context: Global administration
- √ Refresh Session A.
- √ Select Global administration.
- √ Open Administration context.
- √ Verify Tenant A is not currently available as an active support context after Lease A and Lease C were terminated and Lease B expired.
- √ Verify Support access active is not displayed.
- √ Click Authentication.
- √ Find
[email protected]. - √ Verify Actor ID still equals
APP_ACTOR_ID. - √ Verify Actor Key still equals
APP_ACTOR_KEY. - √ In Account identity boundary, verify:
Person binding
None — no Person linked
- Verify:
Tenant Actor bindings
None — no Tenant Actors linked
- Verify:
Global Actor bindings
1
- Click Support access.
- Set Tenant filter to Tenant A and Status to All statuses.
- Verify retained manual history includes:
- Lease A — TERMINATED;
- Lease B — EXPIRED;
- Lease C — TERMINATED.
- Verify no effective APPROVED manual lease remains.
- No active support lease remains from this suite.
- Global administration remains available.
- Application Actor identity is unchanged.
- No Person or Tenant Actor binding exists.
- Manual history remains retained.
- No effective approved manual lease remains.
PROMOTION BLOCKER: The suite leaves permanent Tenant identity or an unintended active support lease.
Promote Bite 30I.3 into Bite 30I only if every item below is true.
- GLOBAL Application Administrator can open Support access.
- Request form uses exactly one Tenant, fixed expiration, required reason, and explicit permission selection.
- Permission catalog is backend-owned in presentation and excludes application-control-plane/Tenant Administrator authority.
- Duplicate open requests are rejected visibly.
- Tenant A Administrator sees Tenant A requests.
- Tenant B Administrator cannot see Tenant A requests.
- Only exact Tenant Administrator can approve.
- Approval does not extend expiration.
- Approval does not alter permission scope.
- Approved lease produces a selectable Tenant support context.
- Top bar displays Support access active, Lease ID, and expiration.
- People explicitly displays Tenant boundary and Support Lease ID.
- Unleased write/actions are not exposed.
- Support lifecycle control is not available in the lease-backed context.
- Global control-plane requests remain denied in the leased Tenant context.
- Denials do not destroy an otherwise valid lease.
- Request event is attributable to the Lease ID.
- Approval event is attributable to the Lease ID.
- Authorized
people.readsupport use is attributable to the Lease ID. - Denied
expenses.readattempt is attributable to the Lease ID. - Request method/path are visible.
- Tenant Admin can review lease-specific audit.
- Tenant Admin does not receive general application Audit Logs access.
- Global Audit Log Viewer filters by Support Lease ID.
- Support Lease ID is displayed in global audit results.
- Application Administrator Actor ID remains unchanged.
- Application Administrator Actor Key remains unchanged.
- No Person is linked.
- No Tenant Actor is linked.
- Exactly one Global Actor binding remains.
- Termination requires a reason.
- Exact Tenant Admin can terminate immediately.
- Termination removes Tenant authorization.
- Application Administrator's login session remains valid.
- Terminated lease record remains retained.
- Request/approval/use/termination audit remains retained.
- Lapsed PENDING request displays as EXPIRED.
- Lapsed PENDING request cannot be approved.
- Lapsed PENDING request remains historical.
- Lapsed PENDING request does not block a later request.
Do not promote Bite 30I.3 to Bite 30I if any of the following occurs:
- Application Administrator can request wildcard,
TENANT_ADMIN,authz.manage, or other application-control-plane authority through a support lease. - Wrong Tenant Administrator can see, approve, terminate, or audit another Tenant's support lease.
- Application Administrator can approve or terminate its own support request.
- Approval changes the originally requested expiration or permission scope.
- Lease activation creates a Person, Person–Tenant Membership, Tenant Actor, Collaborator, or Role Grant.
- Tenant A lease authorizes Tenant B.
- Active lease is not visibly attributable by Lease ID.
- Authorized support action is not auditable against the Lease ID.
- Denied support request is not auditable against the Lease ID.
- Tenant Administrator receives general application Audit Log access.
- Global Audit Log Viewer cannot filter by Support Lease ID.
- Termination does not remove authorization.
- Termination deletes or rewrites history.
- Lapsed PENDING request remains approvable.
- Lapsed PENDING request permanently blocks a later request.
- Any manual lease remains unintentionally effective at the end of the suite.
If all three identities already exist and can sign in with the credentials in this document, do not run a fixture script merely because this suite exists.
If one of the deterministic local identities is missing or unusable, use the accompanying:
prepare-bite30i3-manual-fixtures.py
from the ERS repository root.
The helper:
- reuses
[email protected]'s existing GLOBALAPPLICATION_ADMINActor when valid; - refuses to rebind/elevate an unrelated existing login;
- invokes the repository's own
backend/cmd/provision-e2e-admin; - creates/reconciles the deterministic Tenant Administrator fixtures;
- does not create a Tenant Support Access Lease.
The support leases must be created, approved, used, expired, and terminated through the UI in this suite.
Exactly one DevTools request is required: Test 10, to generate a denied expenses.read support attempt because the UI correctly hides Expenses without that permission.
No SQL is required for normal execution of this manual promotion suite.
If UI evidence is inconsistent, stop the suite and treat the discrepancy as a defect rather than using SQL to override the UI acceptance result.