uninstall.php runs on delete, not on deactivate

Options, tables, scheduled events, user meta and post meta all survive deactivation and deletion unless the plugin removes them explicitly, and most do not.

// uninstall.php — runs on delete only
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
    exit;
}

delete_option( 'turkerdev_settings' );
wp_clear_scheduled_hook( 'turkerdev_daily_sync' );

global $wpdb;
$wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE 'turkerdev_%'" );

The constant check is required — without it the file can be requested directly over HTTP. Scheduled events are the ones that cause visible trouble: a hook whose callback no longer exists fires on every page load and fails silently forever. The LIKE pattern needs the underscore escaped, because in SQL it is a single-character wildcard and an unescaped one matches far more than intended.