TenantAtlas/specs/256-external-support-desk-handoff/quickstart.md
ahmido 52ebf63af1
Some checks failed
PR Fast Feedback / fast-feedback (pull_request) Failing after 2m6s
feat(specs/256): external support desk handoff (#301)
Implement external support desk handoff (spec 256). Created and pushed branch `256-external-support-desk-handoff`.

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #301
2026-04-29 20:16:40 +00:00

4.3 KiB

Quickstart — External Support Desk / PSA Handoff

Prereqs

  • Docker is running.
  • Laravel Sail dependencies are installed.
  • The support-request foundation from Spec 246 is already present in the workspace.
  • One application-configured external support desk target is available through apps/platform/config/support_desk.php, or a fake target is available for implementation tests.

Run locally after implementation

  • Start containers:
    • export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail up -d
  • Run targeted unit proof:
    • export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/SupportRequests/ExternalSupportDeskHandoffServiceTest.php tests/Unit/Support/SupportRequests/SupportRequestLatestHandoffSummaryTest.php
  • Run targeted feature proof:
    • export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/SupportRequests/TenantSupportRequestExternalHandoffTest.php tests/Feature/SupportRequests/OperationRunSupportRequestExternalHandoffTest.php tests/Feature/SupportRequests/SupportRequestExternalHandoffAuthorizationTest.php tests/Feature/SupportRequests/SupportRequestExternalHandoffAuditTest.php
  • Format after implementation:
    • export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent

Manual smoke after implementation

  1. Sign in to /admin as a workspace member with tenant entitlement and support_requests.create capability.
  2. Open one tenant at /admin/t/{tenant} and trigger Request support.
  3. Verify the action shows the existing context summary plus the new handoff mode controls. If no external target is configured in config/support_desk.php, verify the action clearly stays in internal_only mode.
  4. Submit the tenant-context flow with create_external_ticket and verify the success notification includes the internal support reference plus the created external ticket reference.
  5. Reopen the tenant-context action and verify the latest-handoff summary names the same internal support reference and external ticket reference.
  6. Submit the tenant-context flow with link_existing_ticket and verify the stored summary shows the linked external reference without issuing a create call.
  7. Force the external create path to fail, including the five-second timeout path, and verify the action returns explicit partial-success or warning feedback, the internal support request still exists, and the latest-handoff summary shows the persisted failure summary.
  8. Open one canonical run detail page at /admin/operations/{run} for a run that resolves to the same entitled tenant scope and repeat create, link, and failure checks there.
  9. Verify a non-member or non-entitled actor receives 404, while an in-scope member without support_requests.create sees the action disabled and receives 403 on execution.
  10. Verify no new support-request resource, support queue, global-search result, or OperationRun side effect appears in this slice.

Notes

  • Filament v5 remains on Livewire v4.0+ in this repo; the feature stays inside native Filament page actions.
  • No provider registration change is part of this slice; Laravel 12 panel providers remain registered in bootstrap/providers.php.
  • No globally searchable resource is added, so there is no new global-search contract to satisfy.
  • No destructive action is introduced, so ->requiresConfirmation() is not newly involved here.
  • No asset strategy changes are required. The general deploy step cd apps/platform && php artisan filament:assets remains unchanged.

Implementation Close-Out Expectations

  • The targeted unit and feature commands above pass.
  • Manual smoke proves create, link, and explicit failure handling from both existing support-aware surfaces.
  • Audit review shows support_request.created, support_request.external_ticket_created, support_request.external_ticket_linked, and support_request.external_handoff_failed events with the expected bounded metadata.
  • Internal-only support-request submission still works when the external target is unavailable or intentionally bypassed.
  • No new support product surface appears beyond the two existing actions.