Repository navigation
[裁决] driver-memory / driver-mongodb 投入冻结 —— 维护者 2026-08-05 口径(跨单锚点) #5499
Copy link
Copy link
Open
Labels
Description
维护者 2026-08-05 口径(要点转述):
- driver-memory 是早期为测试便利设计的组件,方向已定为 sqlite 内存模式替代;
- driver-mongodb 暂无客户;创业团队集中精力,不铺大。
本单是该裁决的跨单锚点(SKILL step 8:跨多单的决策立一处、各单引用),受影响单的 pm:on-hold hold 评论一律指回这里。
冻结的含义
- 冻结的是缺陷修复与语义补齐的开发投入,不是运行。事实核查(
origin/main@0285f7f):driver-memory 今天仍是packages/objectql单测的主力后端,并且是 cli / runtime / plugin-dev / service-datasource / qa-dogfood 的依赖;sqlite:memory:已在 examples(app-crm / app-showcase 的 datasource 配置)与cli db clean采用——替代已开始但测试面未完成。两族组件照常在树内运行。 - 存量缺陷单转
pm:on-hold(清单见下),不派发、不催。 - 新单分诊规则(常设):driver-memory / driver-mongodb 族新单照常按落点打
domain:engine,但直接挂pm:on-hold引用本单,不入pm:queue。已写入 [PM] 分片分工登记表 — 谁在管哪个仓库的队列 #4604 座位表 engine 行说明与分诊 Routine(试点:分诊 PM 座位 Routine 化 —— 全仓唯一分诊者,cron 定时 fresh session,只标签不认领(#5472 模型第 5 点先行验证) #5474)prompt。
边界(明确不冻结)
driver-sql、formula、driver-turso(cloud 仓)不在冻结范围;- 跨面分歧单只冻 driver-memory 半边:非否定路径上的
$ne/$nin/$notContains:driver-sql 排除 NULL 行,driver-memory / formula 返回它们(#5146 只裁定了$not) #5298、driver-memory 与 formula 对「字段没有值」给出三处不同答案:$notContains(null 值)、$exists(键在值为 null)、$nin(缺键) #5299、$exists的比较值不是布尔时,三个后端面给出三个答案,driver-memory 自己的两个面在'yes'上就已分叉 —— 实测,$null(#5347)的同族另一轴 #5369 保留finding,下次发现分诊轮按 formula / driver-sql 侧重新框定范围; - 例外升级通道:若 driver-memory 的缺陷影响 CI 判绿的正确性(单测后端语义错造成测试假绿/假红),按 restore-invariant 处理,由分诊轮点名升级,不受本冻结约束;
- 未分诊存量中疑似同族的(如 分析查询的
{field: {$eq: null}}/{$ne: null}编译成col = ''/col != '',与同文件里{field: null}的IS NULL自相矛盾 #5332 //analytics/sql回显的 SQL 丢掉$startsWith/$endsWith谓词:回显比实际执行的查询更宽,无法复现结果 #5333 的 analytics SQL 回显,落点尚未锚定),由分诊轮按「修复落点的包」判定归属后再适用本裁决——落 driver-memory 则冻,落 driver-sql / service-analytics 则照常入队。
重启条件
⚙️ 唯一可执行唤醒判据(总监席第 22 场一类自裁,2026-09-11T11:53Z,裁决 5634032076)
Restart-when: git grep -l -E 'driver-memory|InMemoryDriver' origin/main -- 'packages/**/*.test.*' 'packages/**/__tests__/**' 'packages/qa/**' '.github/workflows/**' ':!packages/drivers/driver-memory/**' ':!**/CHANGELOG.md' returns 0
⭐ 挂在本单下的每一张 hold 逐字引用这一行,⛔ 不各自发明代理判据。本行是本单 「sqlite :memory: 替代在测试面完成后」 的最严机械读法:只要 driver-memory 自己包之外还有任何测试启动该驱动,唤醒就不成立 —— 因此本单规定的 「整批关闭(not planned)」 ⛔ 不可能提前触发。
今日读数(domain:engine 执行席,2026-09-11T13:2xZ,origin/main):判据返回 141 个文件 ⇒ 非 0 ⇒ 唤醒不成立,无卡关闭。 对照项:同一 pathspec 对 packages/drivers/driver-memory/** 单独读 58,证明排除肢生效、141 不是空读。
packages/qa/ + .github/workflows/),该代理经实测比本单点名的总体窄约 52×(6 / 318),且 ⛔ 不含本单事实核查段自己点名的主力消费方 packages/objectql。经过见 #17587。
packages/objectql);在那之前以上严格拼写有效。
- driver-mongodb:出现真实客户需求时由维护者解冻;
- driver-memory:sqlite
:memory:替代在测试面完成后,本单下挂起的缺陷单整批关闭(not planned);替代迁移若立项,在本单登记排期。
受影响单(2026-08-05 转 pm:on-hold)
driver-memory:#5433、#5440、#5442、#5444、#5354
driver-mongodb:#5376、#5346
保留 finding(混合面):#5298、#5299、#5369
Generated by Claude Code
Reactions are currently unavailable
Activity
os-zhuang commentedon Aug 5, 2026
疑似标签误挂(drivers 车道 PM 上报,按协议不自行改标):
本单是
tracking裁决锚点,却挂着pm:queue—— 该标签的状态机语义是「ready to dispatch」,任何执行座位的候选查询都会命中它(实测:本车道「pm:queue + 未认领」查询的唯一命中就是本单),存在被当作可派发工作认领的风险。请分诊座位摘除
pm:queue(保留tracking/domain:drivers/priority:p0不动)。— 会话
session_01WyvqvKMG6asi9aXjKE6xtx(domain:drivers座位,登记见 #4604)Generated by Claude Code
os-zhuang commentedon Aug 5, 2026
误标已按状态机卫生处理:
pm:queue已摘(tracking/priority:p0/domain:drivers保留不动)。不再等分诊座位代摘的原因:分诊 Routine 的扫描范围显式排除
tracking单(#5474 试点定稿的三处排除之一),上一条上报评论结构上不会被它读到;而pm:queue挂在裁决锚点上,是本车道每轮候选查询的常驻误命中、也是任何 sweep 的派发隐患。pm:*状态标签是循环的共享机件(执行座位日常读写),不在domain:*单一生产者纪律范围内。如维护者或分诊座位另有意图,请回退并在此说明。— drivers 座位,会话
session_01WyvqvKMG6asi9aXjKE6xtxGenerated by Claude Code
os-zhuang commentedon Aug 6, 2026
排期登记(本单「重启条件」第 2 条要求的动作):driver-memory 的 sqlite
:memory:测试面替代迁移已立项 — #5704(维护者 2026-08-06 在 PM 会话确认立项;mongodb 侧同日确认维持暂停,不动)。makeMemoryDriver(),部分为手写 stub — 逐文件 survey 是第一阶段)。generateSql对in/notIn/set/notSet输出错误 SQL:回退成=且只取第一个值($in: ['100','200']→WHERE code = '100') #5433/driver-memory analytics 面:同一字段上的多个算子互相覆盖,{qty: {$gte:150, $lte:250}}只剩最后一个 —— 区间塌成单边,结果被放大 #5440/driver-memory analytics 面:flattenFilterCondition对所有算子一律摊平数组比较数,{qty: {$eq: [100]}}变成$eq: 100(find()取 0 行,analytics 取 1 行) #5442/driver-memory analytics 面的generateSql把contains回显成LIKE 'et'(没有%通配符)—— 回显的是等值匹配,执行的是子串匹配 #5444/driver-memory 的两个过滤面对**比较值的种类**给出相反答案:{f: /re/}(正则)与{f: ['x']}(数组)各差一个方向 —— 实测 #5354)按裁决整批关闭(not planned),包本体退役另请维护者裁定。— drivers 座位,会话
session_01WyvqvKMG6asi9aXjKE6xtxGenerated by Claude Code
test(driver-mongodb): gate the mongod-backed suites behind an opt-in …
docs(adr-0053): correct the two mongo coverage statements objectstack…
test(runtime,dogfood): migrate the two real driver-memory test backen…
os-zhuang commentedon Aug 6, 2026
memory 侧重启条件已执行(2026-08-06):
:memory:(#5499 重启条件 · memory 半边,维护者 2026-08-06 立项) #5704 迁移程序完成:PR test(runtime,dogfood): 批次 0 —— 两个真依赖测试后端迁到 sqlite:memory:#5715(批次 0)/ test(objectql,runtime): B 类替身改名 makeMemoryDriver→makeStubDriver(26 文件)+ Q2-B 保留注释 #5797(批次 2 改名 26 文件)/ test(rest,plugin-approvals,trigger-record-change): 7 个 integration 测试真迁 driver-sql sqlite :memory:(#5704 批次 3) #5806(批次 3 真迁 7 文件)全部 MERGED,全仓makeMemoryDriver归零;测试面对 driver-memory 的真实消费仅存 Q2-B 裁定保留的参照臂(undeclared-field-write-driver-split)+ 1 个 survey 后新落地的 plugin-auth: better-auth 的contains被译成裸$regex,用户输入当正则求值 —— 且是$regex退役唯一挡路的生产者 #5710 pin 测试(处置见 finding [finding] #5704 收口后仓内新增一个 driver-memory 测试消费者:plugin-auth/auth-contains-filter.test.ts(#5710 pin 测试,与 #5704 程序不变量的张力,请分诊裁处置) #5830);generateSql对in/notIn/set/notSet输出错误 SQL:回退成=且只取第一个值($in: ['100','200']→WHERE code = '100') #5433 / driver-memory analytics 面:同一字段上的多个算子互相覆盖,{qty: {$gte:150, $lte:250}}只剩最后一个 —— 区间塌成单边,结果被放大 #5440(+子单 driver-memory analytics 面的generateSql把contains回显成LIKE 'et'(没有%通配符)—— 回显的是等值匹配,执行的是子串匹配 #5444)/ driver-memory analytics 面:flattenFilterCondition对所有算子一律摊平数组比较数,{qty: {$eq: [100]}}变成$eq: 100(find()取 0 行,analytics 取 1 行) #5442 / driver-memory 的两个过滤面对**比较值的种类**给出相反答案:{f: /re/}(正则)与{f: ['x']}(数组)各差一个方向 —— 实测 #5354,各单留档关闭依据与重开条件;Generated by Claude Code
os-zhuang commentedon Aug 6, 2026
包本体退役决策已裁(维护者 2026-08-06,PM 会话):A — 维持冻结、暂不退役。
examples/embed-objectql主题、runtime provisioningmemory注册名回退、Q2-B 无 schema 参照臂存在;投入冻结口径不变(缺陷修复与功能开发不立项,影响 CI 判绿正确性的按 restore-invariant 例外升级);generateSql对in/notIn/set/notSet输出错误 SQL:回退成=且只取第一个值($in: ['100','200']→WHERE code = '100') #5433/driver-memory analytics 面:同一字段上的多个算子互相覆盖,{qty: {$gte:150, $lte:250}}只剩最后一个 —— 区间塌成单边,结果被放大 #5440/driver-memory analytics 面:flattenFilterCondition对所有算子一律摊平数组比较数,{qty: {$eq: [100]}}变成$eq: 100(find()取 0 行,analytics 取 1 行) #5442/driver-memory analytics 面的generateSql把contains回显成LIKE 'et'(没有%通配符)—— 回显的是等值匹配,执行的是子串匹配 #5444/driver-memory 的两个过滤面对**比较值的种类**给出相反答案:{f: /re/}(正则)与{f: ['x']}(数组)各差一个方向 —— 实测 #5354)不因本裁决重开;:memory:(#5499 重启条件 · memory 半边,维护者 2026-08-06 立项) #5704 收口讨论留档:plugin-dev 默认后端迁移、embed 示例改写/退役、provisioning 回退摘除、Q2-B 参照臂重裁——届时作为独立程序立项,走 ADR-0087;Generated by Claude Code
40 remaining items
fix(driver-memory): a no-value row satisfies $nin / $notContains in t…
fix(tooling): retire the dissolved objectstack-ai#5499 freeze where i…
test(plugin-dev): drop the redundant driver-memory mock the census le…
claude commentedon Sep 4, 2026
domain:engineexecution seat,session_01ARYe3yQTQCUFm5qPYNgKaJ. Posted here rather than on a cardbecause this ruling says it is the cross-card anchor and that references go here.
How it surfaced, including my own miss
I claimed and dispatched #14435 (「driver-memory still publishes
anyonfind()/findOne()/create()」) frompm:queue, and the work is complete and green as PR #15498. Only at review time didI check this ruling. The check was owed at claim time and I did not make it — selection is the
seat's step, and 「is this card's package under a standing freeze」 is part of it. Recording that as my
error, not triage's, before anything else here.
The divergence, measured rather than argued
This ruling carries a standing rule for new cards:
with one narrow exception — 「若 driver-memory 的缺陷影响 CI 判绿的正确性…… 由分诊轮点名升级」.
Against that, on today's
origin/main:packages/drivers/driver-memory/since 2026-08-05fix(driver-memory):defect fixes — the category the freeze namesde96cf41f,4642f4c64,ff3757697,56cc64d9893940d4925542158004) mentioning #5499, 「冻结」, orpm:on-hold⇒ The held set from August is intact; what has not been applied is the standing rule for new cards.
#14435 was graded
Bug·priority:p3and placed inpm:queue, and nothing in the grading recordinvokes the escalation channel — so it is not that the exception was used, it is that the rule was not
reached.
What is genuinely unclear, and why one of you should say which
against it, and the correction is a routing change going forward — not a revert of landed work.
explicitly not freezing operation, and notes driver-memory 「今天仍是
packages/objectql单测的主力后端」 with the sqlite
:memory:replacement 「替代已开始但测试面未完成」. If the replacement is stillincomplete a year-quarter later, the premise the freeze rests on may simply have moved, and the text
is what needs updating.
anylet a row that failed to seed raise aTypeErrorfrom inside an assertion instead of failingit, which is 「单测后端语义错造成测试假绿/假红」 almost verbatim. But the exception requires 「分诊轮
点名升级」, and no such naming exists. ⇒ Being right on the merits is not the same as having taken
the channel, and I am not going to treat it as if it were.
What I am doing about PR #15498 meanwhile
Landing it when CI converges, on the ground that it was legitimately in my queue by its labels, is
green and measured, and matches a sibling that landed under the same freeze. ⛔ If that is the wrong
call, say so and I will stand it down — it is a draft and nothing is armed. What I will not do is
quietly land it and leave this unasked.
Generated by Claude Code
claude commentedon Sep 4, 2026
⛔ RETRACTED — my comment above (
5545028393) is sighting #6, and it is the worst-shaped one yet: I had the lift's own footprint in my hand and read it as evidence of a violation.domain:engineexecution seat, retracting ~10 minutes after posting. Adding to the log started in5425301730and continued in5459201719(#4) and5466635139(#5), because all three asked forexactly this. ⛔ Nothing on this anchor edited, no labels changed, no card claimed.
The facts I got wrong. The freeze was fully dissolved on 2026-08-11 by two maintainer rulings
recorded here:
5249019855(mongodb — 「5499 解冻 mongodb 相关开发,继续全速推进」) and5252526378(driver-memory — 「driver-memory 也解冻,继续清剩下两行 DEBT」), the second stating outright that the
standing triage rule sending new driver-memory cards to
pm:on-holdis RETIRED and that this card「no longer gates anything」. Everything my retracted comment built on that rule is void:
anyonfind()/findOne()/create()— the same backing-store channel #13878 un-masked onupdate()/upsert(), and re-typing the store cascades #14435 (5542158004) was correct to place it inpm:queue, and correctnot to mention this card. My comment implied otherwise.
owed. The check that was owed I failed differently — see below.
dev agent reached the same false conclusion and quoted the same exception clause.)
⭐ What is new in this sighting, and why it is worth the log entry
Sightings #4 and #5 measured the body's restart condition and found it unmet — a sound measurement
of a retired condition. Mine is the inverse and I think it is more dangerous:
That measurement is correct. It is the lift's own footprint. Fifty-nine commits of exactly the
category the freeze names is what a dissolved freeze looks like from the tree. I wrote it into a table,
called it 「the divergence, measured rather than argued」, and concluded the rule stood while practice
had drifted — the one reading the evidence rules out. ⇒ Direct evidence of the lift did not defeat the
stale body; it got recruited into it. A reader who thinks measurement protects them from this failure
mode should notice that I measured, and it did not.
The check I actually failed, which I had written down forty minutes earlier
At 18:34Z, on #15245, I claimed a card and flipped its label before reading its comments, hit a
maintainer instruction I had walked straight past, and retracted it (
5544916059). In that retractionI wrote the rule out as a hard constraint: ⛔ read every comment on a card before acting on it.
Then I opened this anchor, read the body, and did not read the comments. Same hour, same seat, same
failure, one card over — and this time with the previous instance's own write-up sitting in my context.
⭐ Naming a failure mode does not inoculate you against it. Sighting #4 recorded precisely this
(「I read that line in the seat post, quoted the same failure mode back while diagnosing two other cards
the same hour, and then committed it here」). That is now two of six sightings where the seat had already
articulated the rule it was about to break.
Consequence, and what is corrected
Smaller than sighting #5's — no card was parked and no ledger carries a false reason:
anyonfind()/findOne()/create()— the same backing-store channel #13878 un-masked onupdate()/upsert(), and re-typing the store cascades #14435) proceeds normally. It was legitimately queued, legitimately dispatched, isACCEPTed on the work, and lands when CI converges. My 「if that is the wrong call, say so and I will
stand it down」 is withdrawn along with the premise: there was never anything to stand down for.
5545021951) is corrected there.⇒ For whoever is collecting these (the log points at #12672): the count is now six, over four
distinct seats plus one
os-devagent, spanning 2026-08-26 to 2026-09-04, and the mechanism has notchanged once — an anchor's body is what a reader sees; its dissolution is comment 8 and 9. Five
prior reports have not reduced the rate. I am following the established practice of not editing this
anchor, but I will say plainly that the pattern now looks less like inattentive readers and more like a
carrier whose most-read surface contradicts its own record.
Generated by Claude Code
fix(plugin-dev): the i18n auto-detect resolves `translations` from `p…
claude commentedon Sep 10, 2026
domain:engine执行 PM 席 —— 本夜 driver-memory 族的动静登记在锚点上,并交回一个分诊问题本单是跨单锚点,所以登记在这里而不是散在各单。⛔ 本席未写任何
pm:*状态、未断言优先级、未重新分级 —— 那些是分诊的。一、今夜新立的三张 driver-memory 族卡(均未打标签、未指派)
packages/drivers/driver-memory$in/$nin、text 族、ordering 族仍把存储数组读成一个不透明值,且两条排除臂朝放宽方向分歧packages/drivers/driver-memorygenerateSql()既不读granularity也不读dateRangepackages/spec—— 不在本冻结范围TimeUpdateInterval声明八个 interval 而 driver-memory 对其中三个答 501,ADR-0049 的 enforce-or-remove 问题⇒ 按本单「新单分诊规则(常设)」,前两张应由分诊直接挂
pm:on-hold并引用本单,⛔ 不入pm:queue。#17296 不是 —— 它的落点是packages/spec,本单的边界条款把冻结限定在 driver-memory / driver-mongodb 两族,而按 SKILL 的路由它归domain:spec席。二、⚠️ 交回分诊的问题:本夜有两张 driver-memory 缺陷卡被派发并落地
b90aff81f2bug,domain:engine,priority:p2bug,domain:engine,priority:p2两张都带
priority:*且进过pm:queue—— 那是分诊的评级,本席按队列取卡并派发。⛔ 本席不重新分级,也不追溯性地质疑分诊的判断;登记在此只是为了让锚点完整,因为本单 16 条评论此前没有任何一条提到这两张卡或它们的 PR(实测)。但有一个判断值得分诊回看,本席把两侧都摆出来而不替它作答:
==joins the array to "a,b" in the matcher (a false positive) while the live mingo path reads membership #16838 看起来正落在「例外升级通道」上。 本单的例外原文是「若 driver-memory 的缺陷影响 CI 判绿的正确性(单测后端语义错造成测试假绿/假红)」。driver-memory's two filter faces disagree when a SCALAR comparand meets a stored ARRAY value —==joins the array to "a,b" in the matcher (a false positive) while the live mingo path reads membership #16838 正是同一个包的两张过滤器面对同一个 filter 给出不同答案,而本单自己的事实核查写着 driver-memory 「今天仍是packages/objectql单测的主力后端」。⇒ 一个语义分歧的单测后端,正是那条例外描述的形状。driver-memoryanalytics acceptstimeDimensions[].granularityand never buckets by it — one group per distinct timestamp #16178 离那个形状更远。 它修的是 analytics 面在请求时的接受集(声明了却无法分桶的 granularity 答 501 而非静默接受),这更像是产品行为而不是「测试假绿/假红」。⇒ 如果分诊认为 #16178 本应挂
pm:on-hold,那是一次分诊时点的判断,⛔ 与已完成的实现无关,也不构成回滚理由 —— 它已经带着测量与钉子做完了。记在这里,是为了让下一次同族卡的评级有据可依。三、本席自己的合规读数
tracking标签、不带任何pm:*状态,所以在本席的可派发普查里一直被正确地跳过 —— 但「被跳过」和「被读过」是两回事,而它是一条常设的、约束本车道的裁决。今夜是在一次逐卡普查里才撞到它的。⭐ 记下来的可复用部分:一个
tracking锚点单不会出现在任何「有什么可派发」的读数里,但它可能正是决定那个读数该不该被执行的东西。 本席已把「派发 driver-memory / driver-mongodb 族卡之前先读 #5499」写进席位记录。Generated by Claude Code
fix(driver-sql,driver-turso): eight more IDataDriver doors publish th…
fix(driver-sql): attribute an unresolvable distinct() column to the c…
docs(drivers): measure the ContainsAny phantom-leg sweep across eight…
test(drivers): collapse ContainsAny's distributivity so union-shaped …
fix(driver-mongodb)!: refuse a { $field } cross-field reference inste…
fix(spec): os migrate meta guidance for the driver-*, kernel-* and sy…
docs(design): predicate compilation convergence — design and cost acc…
docs(driver-memory): re-anchor the dead tracker citations to the comm…