The coverage map distinguishes a dedicated scenario from an unresolved category. Proposed scenarios define proof to build; bindings retain the exact assertion references and identify their executable suite.
Match portal memberships to CRM contacts: Confirm twice, finish contact verification, and read the linked membership.
Derive member access from appointments and eligibility: Sign in by password, change eligibility, and sign in again; repeat with an evaluator failure.
Maintain workspace information and operating status: Disable the workspace and try portal discovery and password sign-in after the availability cache expires.
Coverage
Rulegap: FND-PFM-SEC-076
Transitiongap: FND-PFM-SEC-076
Validationcovered
Permissioncovered
Edgecovered
Failurecovered
Boundarycovered
Concurrencycovered
Invariantgap: FND-PFM-SEC-076
Interactioncovered
Test Scenarios
13 scenarios proving CAP-PFM-SEC-019; 8 bound to an existing test.
01Reconcile one portal build per workspaceconcurrencyapinegativetest
Prepare unknown, wrong-password, unconfirmed, suspended and revoked accounts.
Steps
Attempt password sign-in for each case.
Expected
Match unknown-address and wrong-password responses; reveal unverified status only with the correct password. Reject disabled memberships and revoke tokens issued to a revoked member.
Use an isolated portal sign-in pool in provisioning state, with the required authority and guard fixtures.
Steps
[
{
"do": "Finish the onboarding stack, read its outputs and register the matching pool reservation.",
"expect": "Read the resulting portal sign-in pool as active; inspect the associated records and recorded history for this transition.",
"provenance": "proposed",
"source": [
"services-platform:modules/security/services/persistence/identity-pools.ts:completePortalPoolReservation",
"services-platform at ad3f6a65: modules/security/db/identity-pools.table.ts; services/persistence/identity-pools.ts; services/onboarding/*; authorizer/authorize.ts (step 2)."
]
}
]
Expected
Read the resulting portal sign-in pool as active; inspect the associated records and recorded history for this transition.
Data
A disposable customer, workspace and named actor; a controllable clock where the transition depends on time.
Source
services-platform:modules/security/services/persistence/identity-pools.ts:completePortalPoolReservation,services-platform at ad3f6a65: modules/security/db/identity-pools.table.ts; services/persistence/identity-pools.ts; services/onboarding/*; authorizer/authorize.ts (step 2).
10Portal sign-in pool: provisioning to provisioningtransitionapiproposed
Use an isolated portal sign-in pool in provisioning state, with the required authority and guard fixtures.
Steps
[
{
"do": "Recover a failed reservation with no members and create replacement onboarding work.",
"expect": "Read the resulting portal sign-in pool as provisioning; inspect the associated records and recorded history for this transition.",
"provenance": "proposed",
"source": [
"services-platform:modules/security/services/onboarding/failed-portal-stack.ts",
"services-platform at ad3f6a65: modules/security/db/identity-pools.table.ts; services/persistence/identity-pools.ts; services/onboarding/*; authorizer/authorize.ts (step 2)."
]
}
]
Expected
Read the resulting portal sign-in pool as provisioning; inspect the associated records and recorded history for this transition.
Data
A disposable customer, workspace and named actor; a controllable clock where the transition depends on time.
Source
services-platform:modules/security/services/onboarding/failed-portal-stack.ts,services-platform at ad3f6a65: modules/security/db/identity-pools.table.ts; services/persistence/identity-pools.ts; services/onboarding/*; authorizer/authorize.ts (step 2).
11Register and authenticate portal members with match portal memberships to crm contactsinteractionapiproposed
A workspace has an active portal pool and a member with correct credentials.
Steps
Disable the workspace and try portal discovery and password sign-in after the availability cache expires.
Expected
The workspace gate refuses the requests before the identity handler admits the member.
Data
An isolated customer with two workspaces, ordinary and staff identities, and records owned by this run.
Source
services-platform:modules/tenants/services/access/tenant-availability.ts:tenantAvailabilityOf,services-platform:modules/security/tests/unit/services/portal/portal-identity.spec.ts#refuses a tenant whose portal pool is suspended exactly as an unknown tenant