Skip to content

docs: record the Open Question 7 decision on dev — chat joins the queue (#1989) - #2933

Merged
vybe merged 2 commits into
devfrom
docs/1989-oq7-decided
Sep 21, 2026
Merged

vybe merged 2 commits into
devfrom
docs/1989-oq7-decided

Conversation

@obasilakis

Copy link
Copy Markdown
Contributor

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-consolidate after that branch had already been squash-merged to dev as #2657. The change never reached dev, which still says Open Question 7 is "under consideration, not decided."

This PR lands it on dev:

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 passed
  • No remaining "scope cut" / "not decided" wording for this question in src/backend/services, docs/planning, docs/testing

Closes #1989

🤖 Generated with Claude Code

obasilakis and others added 2 commits September 21, 2026 15:46
…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>

@vybe vybe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merge-train: batch validated on train/20260921-1418 (#2934).

@vybe
vybe merged commit 848a0ae into dev Sep 21, 2026
27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants