Deployments that shipped reviewer_failure_count as a local migration
numbered 15 record schema_migrations version 15 under that name, so the
version-number-only runner skips the canonical turn_progress_text
migration (also version 15) and never creates paired_turns.progress_text
/ progress_updated_at, which the runtime reads. Add an idempotent compat
migration (020) that re-adds the columns when missing, plus a regression
test reproducing the collided-version-15 database.
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
The user only sees the final owner message, not the owner↔reviewer loop. Add a
"Finalize message format" section mandating a direct answer, a consolidated
recap (no transcript, no narrating disagreement), an explicit 사용자 액션 아이템
section (with "없음" when nothing is needed), and no reviewer-loop meta phrases.
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Stop overwriting the user-registered group/room name with the live Discord
channel name during channel-meta refresh; keep the alias and log the
divergence at debug instead.
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
One-off script that logs in with each configured Discord bot token and prints
the bot member's effective permission bits per guild, so capability claims can
be verified empirically instead of inferred from intents.
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Replace the naive byte-slice chunk loop with a fence-aware chunkForDiscord()
splitter: prefers newline boundaries, re-closes any open ``` fence at the end
of a chunk and reopens it with the same language tag at the start of the next,
and is surrogate-pair safe. Adds 10 unit tests for the seam, multi-fence
documents, surrogate pairs, and single-line overflow.
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Port the local primer subsystem onto the upstream base by intent:
- add src/usage-primer.ts (KST-slot primer firing Claude + Codex signals)
- extend codex-warmup with the ignoreZeroUsageWindow runtime option used
by the primer so a slot is never skipped just because Codex is partway
through its weekly window
- Codex primer fires unconditionally (maxUsagePct/maxD7UsagePct=100),
mirroring the Claude primer, refreshing usage before selection
- wire startUsagePrimer() into the runtime bootstrap
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>