① 基数 N 的取值改成产品定的算法: 首次 min(在岗人数 × 20, 候选总数),之后 min(上一次的 N, 候选总数),时效首次 3 天后沿用。⚠ ️ 与候选取小压低的是 target,⛔ **不回写基数** —— 候选不够是这一批的偶然事实, 存进去的话主管点一次 44 人的小格子,以后所有批次永远 44 人,而他看不出为什么。 所以确认单同时给 batchSize(基数)与 target(本批实际),卡片存前者。⚠ ️ fetchLimit 改按基数算,让 count 与取明细还能并发,不多一个来回。 ②🔴 硬约束:**客服不能接别人的专属患者**。有专属(且在名册内)的患者只有一个去处, 给不下就落不下(unplaced),不允许溢出给第三个人。 · 推翻原「专属已满 → 溢出转铺平」,SPREAD_OVERFLOW 不再产生(枚举保留,老批次在用); · 两趟分工改为「专属独占 → 无主患者水位法」,后者负责抹平前者造成的不齐; · maxThisBatch 精调压过专属:说了只给 5 条,第 6 个她的专属患者就落不下,⛔ 不许改派; · 上一版给专属加的"目标水位封顶"与本约束冲突(会把专属患者改派给第三人),撤掉。⚠ ️ 直接后果,已在教条里写明:「最后齐平」变成尽力而为。实测 N=340 时康慧捧 一个人是其中 248 人的专属,他就拿 248 条 —— 那些患者只有他能接。 调节手段是给他设 maxThisBatch 或换更小的 N,⛔ 不是让系统偷偷分给别人。 本地实测:1,081 候选 → 首批 340 人(17×20),池子里还有 741 人排队。988 tests green。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
| Name |
Last commit
|
Last update |
|---|---|---|
| .claude | Loading commit data... | |
| .design-sync | Loading commit data... | |
| apps | Loading commit data... | |
| clickhouse/config.d | Loading commit data... | |
| deploy | Loading commit data... | |
| docs | Loading commit data... | |
| packages | Loading commit data... | |
| scripts | Loading commit data... | |
| .gitignore | Loading commit data... | |
| .gitlab-ci.yml | Loading commit data... | |
| .npmrc | Loading commit data... | |
| .prettierrc | Loading commit data... | |
| README.md | Loading commit data... | |
| docker-compose.expose.yml | Loading commit data... | |
| docker-compose.managed.yml | Loading commit data... | |
| docker-compose.prod.yml | Loading commit data... | |
| docker-compose.yml | Loading commit data... | |
| eslint.config.mjs | Loading commit data... | |
| liu.cjs | Loading commit data... | |
| package.json | Loading commit data... | |
| pnpm-lock.yaml | Loading commit data... | |
| pnpm-workspace.yaml | Loading commit data... | |
| tsconfig.base.json | Loading commit data... | |
| turbo.json | Loading commit data... |