"""boot event crash detail (firmware F-070) Firmware F-070 enriches boot_report (and telemetry.get_boot_history entries) with a fuller `crash` object (backtrace, backtrace_corrupted, elf_sha256) and a new, independent `pre_crash` object (uptime/heap snapshot + optional abort_msg). Both are stored verbatim as JSONB so future additive fields don't need another migration. The existing flat crash_* columns stay and are still filled, so older rows and older firmware keep working unchanged. Revision ID: c9d0e1f2a3b4 Revises: b8c9d0e1f2a3 Create Date: 2026-09-30 00:00:00.000000 """ from typing import Sequence, Union import sqlalchemy as sa from sqlalchemy.dialects import postgresql from alembic import op revision: str = "c9d0e1f2a3b4" down_revision: Union[str, None] = "b8c9d0e1f2a3" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: op.add_column("device_boot_events", sa.Column("crash", postgresql.JSONB(), nullable=True)) op.add_column("device_boot_events", sa.Column("pre_crash", postgresql.JSONB(), nullable=True)) def downgrade() -> None: op.drop_column("device_boot_events", "pre_crash") op.drop_column("device_boot_events", "crash")