Skip to content

M8-07 Switchover and revert per channel

No Date Ruling Reason
D-M8-07-1 2026-10-24 bothy import discord switch takes --guild, --map, --channel (exactly one) and --discord-locked, plus --takeover, --report, --discord-token-file, --config and --session-file of a run. Without --discord-locked it ends with exit 2 and the text of step 1 before any call: the tool cannot see the Discord lock, so the flag is the owner's statement that step 1 is done (22 13.3). --map is required like for every mirror round, because the round of M8-05 compares the file with the stored mapping. Then the M8-04 steps of a run with --channel <id> (configuration, token, session, the whole preflight, the selection) and the preconditions, each exit 2 before any write: the channel is mapped with a target other than skip, its channel item is posted, its stored lead is discord, and the source is running. The lease rules of M8-04 apply (exit 3, --takeover). Brief design note 1; the brief's command line has no --map (D-W-100).
D-M8-07-2 2026-10-24 switch runs one --apply --once round of the read mirror narrowed to the channel, then reads the channel and the active threads of Discord again and, for the main thread and each thread whose last message is newer than the cursor, the messages after the cursor, and applies the settle rule once more with the current time. Anything held back (busy, unsettled, lookback) is exit 1 with the count per reason and the hint to repeat after import.follow.settle_after; messages of a taken type after the cursor that the rule does not hold (written after the round, or in a thread whose batch failed) are exit 1 with "run switch again", because the Discord lock is evidently not in place. Otherwise standard error carries step 3 (web console: "Lead here" (lead bothy), then the operator agent:<planned operator> of the stored mapping, or a note when the mapping plans none) and step 4 (the probe), exit 0. The tool writes nothing beyond the round and the lease and never calls import.manage or channel.operator.set. Brief design note 2, 22 13.3, 08 6.4.
D-M8-07-3 2026-10-24 revert --guild --channel only reads the server (no lease, no Discord, no token): the open source of the guild, the channel entry of the stored mapping, the posted channel item, getChannel (its main thread), listChannelThreads and listThreadMessages from after_seq 0 page by page. It counts per thread the messages with origin other than import, kind other than system and no deleted_at (a deleted message is nothing to transfer), prints one line per thread with a count above zero (the Bothy thread ID, never a title or content) and the total, then the owner's steps of 22 13.4; for a stored lead that is already discord step 1 says the console step is done. Exit 0; a channel the mapping does not name or skips, or one not imported, is exit 2. Brief design note 3, R-IM-12.
D-M8-07-4 2026-10-24 status prints per channel of the stored mapping, sorted by Discord ID, <discord id>: <lead>, server channel <uuid>, read-only or writable, operator ok / operator differs from planned / no operator, with inconsistent appended when lead bothy meets a read-only channel or lead discord a writable one (22 12.1); a skipped channel says skipped, one not posted yet not imported. The operator is the effective operator of getChannel compared with the agent of the planned operator's handle (listAgents). It prints the Bothy channel ID instead of the Discord and Bothy channel names the brief names, because 22 10.1 keeps status free of names of channels, spaces and people (specification first). Brief design note 4, 22 10.1, 12.1.