Skip to main content
Version: Latest

13. Troubleshooting

SymptomLikely causeResolution
"Shared location reference-data validation is not implemented in this codebase."The DI defect fixed in this task (Shumoul.Framework.MultiTenancy.Api < 1.0.116). If seen again, ISharedLocationService may have been changed to extend ITransientService/IScopedService/ISingletonService again.Confirm the package version in use is ≥ 1.0.116. Run SharedLocationServiceRegistrationShould.NeverExtendAnyAutoRegistrationMarkerInterface — it fails immediately if the regression reappears.
Registration fails with a country/region/city validation error for IDs that look correctThe submitted CountryId/RegionId/CityId do not satisfy the exists/active/belongs-to relationships in Chapter 6 §6.7 — commonly, an inactive row, or a region/city that belongs to a different country/region than selected.Re-fetch the dropdown chain (Country → Region → City) immediately before submitting rather than caching stale IDs; verify the IDs against the same prerequisite APIs.
Registration fails with a package/plan errorPlanPackageId does not resolve to an active SubscriptionPlanPackage, or the wrong ID was submitted (PackageId/PlanId instead of the SubscriptionPlanPackage.Id)Use the Id field directly from GET api/Subscription/Packages/pricing — see Chapter 4 §4.4.
Duplicate email at registrationA demo subscription was already requested for this emailUse a distinct email per test attempt (e.g. +location-test style suffix) in dev; in production this is a genuine duplicate-signup guard.
Login returns 423 right after activationTenant DB provisioning is still running (migrations + seeding) — expected for a brand-new tenant, see Chapter 8 §8.2Retry after a short delay; do not treat as an auth failure.
onboarding/apply returns 501 "the onboarding apply bridge is not configured"OnboardingApplyBridgeSettings.Enabled = false — the production-safe default in every checked-in configExpected in most environments. Only enable via environment variables for an explicit dev/local verification session — see Chapter 10 §10.2.
onboarding/apply returns "AcceptAll must be true in Phase 1."The client omitted acceptAll: true, or sent overrides expecting partial applicationAlways send { "sessionId": "...", "acceptAll": true } in the current phase — see Chapter 9 §9.3.
Onboarding survey does not appear at first loginThe survey may not be published/seeded, or the tenant's onboarding status was already Skipped/Applied from a prior sessionCheck GET onboarding/status directly; check the onboarding survey seeder ran ("Seeded the onboarding survey." in startup logs).
Missing permissions for onboarding or Starter Kit endpointsOnboarding uses TenantPermissions.Onboarding.* (customer-tenant permission set); Starter Kit uses TenancyPermissions.TenantStarterKits.* (root-tenant-only permission set) — these are two different permission classes, see Chapter 11 §11.2Confirm which permission set the calling identity actually needs; a 403 from Starter Kit endpoints with a normal tenant admin JWT is expected behavior, not a bug.
Missing subscription entitlement warnings in the recommendation (warnings array mentions no default warehouse/cash account/invoice template)Expected — those defaults are created by the Starter Kit, a separate flow (see Chapter 11), not by onboarding applyNot an error; document to the frontend team as expected first-run state until a SaaS admin runs the Starter Kit for that tenant.
A dev/staging tenant's registered package looks wrong, or entitlement checks behave unexpectedly for a tenant that has existed for a whileThe tenant's TenantSubscription may point at a SubscriptionPlanPackage row that no longer exists or was reorganizedUse the root-admin-only Preview/Apply remediation tool — never guess or hand-edit the row — see Subscription Packages & Entitlements, Chapter 16.