# Tenant licence cache — apply

    cp -R license-cache/app/*      ./app/
    cp -R license-cache/database/* ./database/
    php artisan migrate --force

## Register the command (bootstrap/app.php withCommands)
    \App\Prospecting\Console\MatchTenantLicensesCommand::class,

## Build the cache
    php artisan prospects:match-tenants

## Chain it to the TDLR import
In FetchTdlrCommand, after the cross-reference rebuild:

    $this->call('prospects:match-tenants');

## Why
Matching streams ~400,000 prospect rows. That's fine nightly, unusable per request —
the first version timed out the Tenants page. The result is one row per tenant and only
changes when TDLR data or the roster changes, so it's computed on import and read from
a small indexed table during requests.
