Skip to content

Kanban migration fails after update: no such column spawn_failures #20842

@emm3ttarmstrong

Description

@emm3ttarmstrong

Bug description

After the 2026-05-06 04:00 PDT auto-update/restart, the gateway came back up but the embedded Kanban dispatcher began failing on the default board with a SQLite migration/schema error:

2026-05-06T04:02:07-07:00 armstrong-server python[4154796]: ERROR gateway.run: kanban dispatcher: tick failed on board default
Traceback (most recent call last):
  File "/home/emmett/.hermes/hermes-agent/gateway/run.py", line 3654, in _tick_once_for_board
    conn = _kb.connect(board=slug)
  File "/home/emmett/.hermes/hermes-agent/hermes_cli/kanban_db.py", line 906, in connect
    _migrate_add_optional_columns(conn)
  File "/home/emmett/.hermes/hermes-agent/hermes_cli/kanban_db.py", line 964, in _migrate_add_optional_columns
    conn.execute(
sqlite3.OperationalError: no such column: "spawn_failures"

Context

  • Hermes auto-update job ran at 2026-05-06 04:00 PDT.
  • hermes update --check reported the install was 190 commits behind origin/main.
  • hermes update --no-backup fast-forwarded the checkout to e70e49016.
  • Gateway restarted successfully at 04:01:53 and connected Telegram/Discord/Slack by 04:02:01.
  • The dispatcher error appears immediately after startup when the embedded Kanban dispatcher starts.

Environment

  • Repo checkout: /home/emmett/.hermes/hermes-agent
  • Current commit: e70e49016 fix(cli): guard logger.debug in signal handler (#13710 regression) (#20673)
  • Host: armstrong-server, Ubuntu 24.04.4 LTS
  • Python: 3.11.15
  • Service: hermes-gateway.service running /home/emmett/.hermes/hermes-agent/venv/bin/python -m hermes_cli.main gateway run --replace

Expected behavior

Kanban DB migrations should be idempotent across existing board databases, and the dispatcher should not fail on startup after an update.

Actual behavior

_migrate_add_optional_columns() attempts a migration path that references spawn_failures before the column exists, causing the dispatcher tick for the default board to fail.

Acceptance criteria

  • Existing Kanban board DBs from pre-update installs migrate cleanly.
  • hermes kanban --board default list --json and gateway embedded dispatcher startup do not raise sqlite3.OperationalError: no such column: "spawn_failures".
  • Add/adjust a migration regression test covering a DB missing spawn_failures.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Low — cosmetic, nice to havecomp/pluginsPlugin system and bundled pluginstype/bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions