Source version and installed-release boundary
This manual covers the reviewed newer product source workflow. It requires its matching released core, additive database structure and signed modules where applicable. The separately approved licensed 1.3.8 archive can have an earlier workflow. Do not assume these screens or commands exist merely from a numeric version label, and do not copy newer source files over a signed installation. Documentation publication does not upgrade the product or enable any external account.
Code and database structure must be deployed together. A mail delivery release
requires eleven recovery columns and the lease_expires_at and next_attempt_at
indexes on outbound_mail. Missing structure pauses delivery; editing SMTP
credentials or repeatedly retrying messages cannot repair this condition.
Inspect the installation locally with the same PHP binary and environment used by cron:
php artisan emaila:mail-schema
The default operation is read-only. It exits with status zero only when the mail schema is complete; otherwise it lists the missing table, columns or indexes and exits with a failure status. Use it as a deployment completion check before resuming workers. System readiness shows the same structural report.
After a verified private database backup, the targeted repair is:
php artisan emaila:mail-schema --repair
php artisan emaila:mail-schema
The explicit repair acquires the scheduler's core:tick lock. If a scheduler or
another repair owns it, wait for that operation to finish and run the command
again. Complete any active installation, business migration, restore or update
operation first. The command refuses a missing original mail table, incomplete
base schema, missing migration ledger or encompassing database transaction.
Only the release-owned
2026_10_12_000001_add_outbound_mail_delivery_recovery.php migration can run.
It adds missing nullable recovery fields and retry indexes, confirms their
presence, and records the migration once. It can resume partial DDL even when the
migration name was already recorded. It does not execute other pending migrations,
seed data, rewrite message payloads, alter delivery status, dispatch jobs, retry
messages or contact an SMTP server. If repair stops midway, preserve the backup,
review local database permissions and retry this same command; do not roll back
the mail recovery migration or delete submission evidence.
The normal scheduler may process eligible, previously unattempted pending mail after repair. Previously attempted or uncertain messages retain their ownership and submission evidence and still require explicit operator review. Repair does not establish SMTP connectivity, provider acceptance or inbox receipt. Inspect the outbox and scheduler heartbeat separately after the schema check passes.
The signed core updater remains a file-only updater. It must not be used to apply database changes or bypass its pinned bridge. Coordinate approved additive database deployment separately and require the structural check above before opening delivery workers. See mail operations for delivery claims, retry limits, uncertainty and audited message recovery.

