Skip to content

[defer] feat(proxy): steer local core selector off set-aside members - #14752

Merged
diegosouzapw merged 4 commits into
diegosouzapw:release/v3.8.51from
maxmad64bis:fix/core-selector-control
Sep 25, 2026
Merged

diegosouzapw merged 4 commits into
diegosouzapw:release/v3.8.51from
maxmad64bis:fix/core-selector-control

Conversation

@maxmad64bis

@maxmad64bis maxmad64bis commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

⚠️ base-red inherited: #14547

Summary

Control calls to the local core selector stay invisible when they fail: a blocked target, an unusable secret, a refused switch or a network error only reach the server log, so the operator never sees the steering is broken. Failed control calls now surface as a subscription warning through the existing warning path (status = "ok" + error column carrying SELECTOR_SWITCH_FAILED), persisted in dedicated columns so the next sync does not erase it, and cleared by the next success. The switch slot is reserved before the first await, so two simultaneous triggers on one selector collapse to a single PUT.

Related Issues

No linked issue — failed control calls surfacing as subscription warnings answers the maintainer's #14702 review thread (2026-09-24).

Validation

  • Change type: other
  • Focused tests and category gates from the golden path
  • npm run lint
  • Reconciled with the current active release base; focused checks rerun afterward
  • Production-code changes include a new or updated automated test in this PR

Tests Added Or Updated

  • tests/unit/proxySubscription.selectorWarning.test.ts (new, 3 tests): refused switch → warning persists after sync; next success → cleared; 2 simultaneous triggers → 1 single PUT; 3/3 green (RED-proven both ways).
  • Neighbor selector suites re-run green: trigger + functional + guard + schema 27/27.

Coverage Notes

  • New warning/merge/slot branches covered by the new suite; no coverage movement beyond the new branches.
  • New en.json keys (14, incl. the error code) translated across all 66 locales (check-new-key-coverage: 0 proxySubscription gaps).

Reviewer Notes

Maintainer rework (merge-batch 2026-09-24)

  • Merged release/v3.8.51 into the branch (real merge, author commits preserved).
  • Dropped the migration-count edits to AGENTS.md, llm.txt, the 66 docs/i18n/*/llm.txt mirrors and README.md: the count was already stale and those files are agent-instruction surfaces that need separate operator approval. They now match the release tip.
  • Migration stays 193_proxy_subscription_selector_control.sql (190–192 are reserved for other PRs in the same batch). Note: fix(proxies): steer selector to members without recent refusals #14804 is stacked on this branch and creates the same 193 file.
  • Fixed settings.proxySubscription.selectorHelp in all 67 locales: the bare selector=<name> was parsed by next-intl as an unclosed rich-text tag (UNCLOSED_TAG), so the help line fell back to showing the raw key. It is now ICU-escaped ('<name>') and renders literally. Regression test: tests/unit/proxySubscription.selectorHelpIcu.test.ts (red before, green after).

@maxmad64bis
maxmad64bis force-pushed the fix/core-selector-control branch from 182708e to 57daa37 Compare September 25, 2026 07:58
@maxmad64bis
maxmad64bis marked this pull request as ready for review September 25, 2026 07:58
# Conflicts:
#	AGENTS.md
#	README.md
#	docs/i18n/am/llm.txt
#	docs/i18n/ar/llm.txt
#	docs/i18n/az/llm.txt
#	docs/i18n/bg/llm.txt
#	docs/i18n/bn/llm.txt
#	docs/i18n/bs/llm.txt
#	docs/i18n/cs/llm.txt
#	docs/i18n/da/llm.txt
#	docs/i18n/de/llm.txt
#	docs/i18n/el/llm.txt
#	docs/i18n/es/llm.txt
#	docs/i18n/et/llm.txt
#	docs/i18n/fa/llm.txt
#	docs/i18n/fi/llm.txt
#	docs/i18n/fr/llm.txt
#	docs/i18n/ga/llm.txt
#	docs/i18n/gu/llm.txt
#	docs/i18n/ha/llm.txt
#	docs/i18n/he/llm.txt
#	docs/i18n/hi/llm.txt
#	docs/i18n/hr/llm.txt
#	docs/i18n/hu/llm.txt
#	docs/i18n/hy/llm.txt
#	docs/i18n/id/llm.txt
#	docs/i18n/ig/llm.txt
#	docs/i18n/it/llm.txt
#	docs/i18n/ja/llm.txt
#	docs/i18n/ka/llm.txt
#	docs/i18n/km/llm.txt
#	docs/i18n/kn/llm.txt
#	docs/i18n/ko/llm.txt
#	docs/i18n/lt/llm.txt
#	docs/i18n/lv/llm.txt
#	docs/i18n/ml/llm.txt
#	docs/i18n/mr/llm.txt
#	docs/i18n/ms/llm.txt
#	docs/i18n/mt/llm.txt
#	docs/i18n/my/llm.txt
#	docs/i18n/ne/llm.txt
#	docs/i18n/nl/llm.txt
#	docs/i18n/no/llm.txt
#	docs/i18n/or/llm.txt
#	docs/i18n/pa/llm.txt
#	docs/i18n/phi/llm.txt
#	docs/i18n/pl/llm.txt
#	docs/i18n/pt-BR/llm.txt
#	docs/i18n/pt/llm.txt
#	docs/i18n/ro/llm.txt
#	docs/i18n/ru/llm.txt
#	docs/i18n/si/llm.txt
#	docs/i18n/sk/llm.txt
#	docs/i18n/sl/llm.txt
#	docs/i18n/sr/llm.txt
#	docs/i18n/sv/llm.txt
#	docs/i18n/sw/llm.txt
#	docs/i18n/ta/llm.txt
#	docs/i18n/te/llm.txt
#	docs/i18n/th/llm.txt
#	docs/i18n/tr/llm.txt
#	docs/i18n/uk-UA/llm.txt
#	docs/i18n/ur/llm.txt
#	docs/i18n/uz/llm.txt
#	docs/i18n/vi/llm.txt
#	docs/i18n/yo/llm.txt
#	docs/i18n/zh-CN/llm.txt
#	docs/i18n/zh-TW/llm.txt
#	llm.txt
A bare <name> parses as an unclosed rich-text tag in next-intl, so the
subscription help line fell back to printing the raw key in every locale.
Escape it as '<name>' so it renders literally, with a regression test that
compiles the message in all locales.
@diegosouzapw

diegosouzapw commented Sep 25, 2026 •

Copy link
Copy Markdown
Owner

Migration number coordination: several open PRs claim the same slot, and the release tip is already at 189 (187_proxy_logs_attempts, 188_call_logs_reasoning_encrypted, 189_quota_schedules). This PR's migration keeps 193, so no rename is needed. Slots go by PR age, and merges happen in ascending order (190 → 196) so the numbering gate stays contiguous.

@diegosouzapw diegosouzapw added the deferred-v3.8.52 Grande demais / suspeito para o lote atual; precisa de sessão dedicada no ciclo v3.8.52 label Sep 25, 2026
@diegosouzapw diegosouzapw changed the title feat(proxy): steer local core selector off set-aside members [defer] feat(proxy): steer local core selector off set-aside members Sep 25, 2026
# Conflicts:
#	docs/reference/ENVIRONMENT.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

deferred-v3.8.52 Grande demais / suspeito para o lote atual; precisa de sessão dedicada no ciclo v3.8.52

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants