Whole-thread prefill shipped gated off: the per-channel toggle Kai rejected landed anyway #830

Closed
opened 2026-08-15 17:18:13 +00:00 by coilyco-ops · 1 comment
Member

#827 merged the whole-thread prefill from #769 with the per-channel toggle its resolved spec asked for. Kai rejected that toggle on the issue three minutes before the merge:

I don't remember asking for a per channel toggle :p This doesn't seem like a per channel thing, remove that filter condition

The removal was pushed to the branch two minutes after 827 merged, so it did not land. main currently ships SIRENS_ECHO_THREAD_PREFILL_CHANNELS, and with the list empty by default whole-thread prefill is off everywhere, which is not the intended behaviour.

Why the toggle should go rather than be defaulted on

A thread is a bounded conversation someone deliberately opened. Reading it whole is what the feature means, not a per-channel preference, and a per-channel list also leaves an open question about which channel to name that the feature does not need.

What holds the cost down is the context budget and the bounded walk, both already shipped. The toggle was doing none of that work.

Acceptance

  • Every turn inside a thread prefills the whole thread, with nothing to opt into.
  • SIRENS_ECHO_THREAD_PREFILL_CHANNELS, its boot validation, and the resolved counts on discord.ready are gone.
  • Outside a thread, the prefill is unchanged.
  • The context budget, the bounded walk, and the truncation annotation are untouched.
https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/pulls/827 merged the whole-thread prefill from https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/issues/769 with the per-channel toggle its resolved spec asked for. Kai rejected that toggle on the issue three minutes before the merge: > I don't remember asking for a per channel toggle :p This doesn't seem like a per channel thing, remove that filter condition The removal was pushed to the branch two minutes after 827 merged, so it did not land. `main` currently ships `SIRENS_ECHO_THREAD_PREFILL_CHANNELS`, and with the list empty by default **whole-thread prefill is off everywhere**, which is not the intended behaviour. ## Why the toggle should go rather than be defaulted on A thread is a bounded conversation someone deliberately opened. Reading it whole is what the feature means, not a per-channel preference, and a per-channel list also leaves an open question about which channel to name that the feature does not need. What holds the cost down is the context budget and the bounded walk, both already shipped. The toggle was doing none of that work. ## Acceptance * Every turn inside a thread prefills the whole thread, with nothing to opt into. * `SIRENS_ECHO_THREAD_PREFILL_CHANNELS`, its boot validation, and the resolved counts on `discord.ready` are gone. * Outside a thread, the prefill is unchanged. * The context budget, the bounded walk, and the truncation annotation are untouched.
Author
Member

Already landed. Verified against main at 255bd2a, closing.

Angie (ENG, claude seat). Read-only verification, no code change needed.

The removal this issue asks for landed nine minutes after the issue was filed, in PR #834 (9d2914e, merged as 979ff6d at 2026-08-15 20:03 UTC), with the two leftovers swept in PR #831 (80de384, 20:51 UTC) and the doc line in 3afa1fa. Nothing here records that, so the ticket has been open against a fixed tree since.

Acceptance, checked line by line

  • Every turn inside a thread prefills the whole thread, with nothing to opt into. agent.go:848 sets wholeThread: at.ThreadID != "", and that is the only producer of the flag. threadprefill.go:72 branches on it alone. The condition is "this turn is in a thread", with no channel term.
  • SIRENS_ECHO_THREAD_PREFILL_CHANNELS, its boot validation, and the resolved counts on discord.ready are gone. The only two occurrences left in the tree are deliberate: TestTheRetiredToggleEnvVarIsInert asserts a stale value cannot fail boot, and docs/sirens-echo-thread-prefill.md records the retirement. onReady (agent.go:414) carries no prefill count. Its configured_channels field is the admission allowlist, and the comment there already says it outlived the toggle it was added for.
  • Outside a thread, the prefill is unchanged. wholeThread is false there, so readTurnHistory takes the same windowed path as before.
  • The context budget, the bounded walk, and the truncation annotation are untouched. threadPrefillBytes, threadPrefillPage, and threadPrefillReads are all still in config.go:406-408 behind overridable, and prefillNote still renders both the dropped-to-fit and did-not-reach-the-start cases.

The one thing worth knowing

The toggle's retirement also removed the staged rollout the original spec assumed, so the context budget and the bounded walk carry the whole context risk alone. docs/sirens-echo-thread-prefill.md already says this in its own words, so it is recorded rather than lost. Not a reason to hold this issue open.

## Already landed. Verified against `main` at 255bd2a, closing. Angie (ENG, claude seat). Read-only verification, no code change needed. The removal this issue asks for landed nine minutes after the issue was filed, in PR #834 (`9d2914e`, merged as `979ff6d` at 2026-08-15 20:03 UTC), with the two leftovers swept in PR #831 (`80de384`, 20:51 UTC) and the doc line in `3afa1fa`. Nothing here records that, so the ticket has been open against a fixed tree since. ### Acceptance, checked line by line * **Every turn inside a thread prefills the whole thread, with nothing to opt into.** `agent.go:848` sets `wholeThread: at.ThreadID != ""`, and that is the only producer of the flag. `threadprefill.go:72` branches on it alone. The condition is "this turn is in a thread", with no channel term. * **`SIRENS_ECHO_THREAD_PREFILL_CHANNELS`, its boot validation, and the resolved counts on `discord.ready` are gone.** The only two occurrences left in the tree are deliberate: `TestTheRetiredToggleEnvVarIsInert` asserts a stale value cannot fail boot, and `docs/sirens-echo-thread-prefill.md` records the retirement. `onReady` (`agent.go:414`) carries no prefill count. Its `configured_channels` field is the admission allowlist, and the comment there already says it outlived the toggle it was added for. * **Outside a thread, the prefill is unchanged.** `wholeThread` is false there, so `readTurnHistory` takes the same windowed path as before. * **The context budget, the bounded walk, and the truncation annotation are untouched.** `threadPrefillBytes`, `threadPrefillPage`, and `threadPrefillReads` are all still in `config.go:406-408` behind `overridable`, and `prefillNote` still renders both the dropped-to-fit and did-not-reach-the-start cases. ### The one thing worth knowing The toggle's retirement also removed the staged rollout the original spec assumed, so the context budget and the bounded walk carry the whole context risk alone. `docs/sirens-echo-thread-prefill.md` already says this in its own words, so it is recorded rather than lost. Not a reason to hold this issue open.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-gaming/sirens-echo#830
No description provided.