docs: record the Open Question 7 decision on dev — chat joins the queue (#1989) - #2933
Merged
Merged
Conversation
…ted (#1989) (#2847) Operator decision 2026-09-16: the edge adapter wins, not the scope cut. The durable queue carries all traffic including human-interactive chat, and the synchronous push dispatch path is deleted once the two supporting pieces land (#2842 queue priority, #2843 one turn per conversation). Three documents asserted the opposite and would have relitigated this: - TARGET_ARCHITECTURE.md Open Question 7 said "under consideration, not decided" and named the scope cut as the candidate answer. - PULL_MIGRATION_STATUS.md said "everything is pull" is false *by design*, and listed interactive chat as deliberately excluded. - PULL_MIGRATION_TESTING.md described the exclusion as a settled scope cut. All three now state the decision and its reasoning, so the question cannot be reopened from the documents themselves. Two corrections ride along, both measured on eu2 during the #1766 soak: - The starvation argument that favoured the scope cut was overstated. Push does not avoid the wait either — chat already queues in a bounded in-memory FIFO at capacity, and the worst case there is already ~32 minutes. What push avoids is waiting behind queued batch work, which priority ordering restores. Parity is the bar, not instant. - The session-serialization requirement is mutual exclusion per conversation, NOT worker affinity. All workers share one container filesystem, so pinning buys nothing and would make a person wait on a busy worker while others idle. Affinity only matters at replica_count>1. Also adds `retry` to the reach table (#2845) — it is in neither trigger set and is 4.7% of eu2's traffic, which Phase 5 cannot delete around. Based on docs/pull-migration-consolidate rather than dev, because that branch already rewrites all three files. Claude-Session: https://claude.ai/code/session_019Tm7UEkd4G9KQZD5oeLRSa Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Open Question 7 is decided for the queue: the pull pilot's exclusion of interactive turns is a migration state until interactive priority (#2842) and per-conversation exclusion (#2843) land, not the scope-cut design boundary the code comments and test docstrings still described. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The decision that human-interactive chat goes on the durable queue was written up in #2847, but that PR merged into
docs/pull-migration-consolidateafter that branch had already been squash-merged todevas #2657. The change never reacheddev, which still says Open Question 7 is "under consideration, not decided."This PR lands it on
dev:TARGET_ARCHITECTURE.mdOpen Question 7 is resolved, andPULL_MIGRATION_STATUS.md/PULL_MIGRATION_TESTING.mdstop describing the scope cut as the design.pull_owns_dispatch, the matching comment incapacity_manager.acquire, and three pull test files described the interactive exclusion as the permanent scope cut. They now call it temporary, lasting until feat(pull): interactive turns jump the queue — the starvation half of Open Question 7 #2842 (interactive priority) and feat(pull): one turn per conversation at a time — the transcript-safety half of Open Question 7 #2843 (one turn per conversation) land.No behaviour change. Interactive turns still take the push path until those two issues ship.
Test plan
pytest tests/unit/test_1766_pull_pilot_exclusive.py tests/unit/test_2048_pull_pilot_reach.py tests/unit/test_2391_scheduled_pull_reach.py: 102 passedsrc/backend/services,docs/planning,docs/testingCloses #1989
🤖 Generated with Claude Code