Repository navigation
driver-memory analytics generateSql() reads neither granularity nor dateRange, so /analytics/sql echoes a statement the pipeline never ran — and accepts an hour that query() now refuses #17301
Description
Activity
- addedpriority:p2Medium: important, M3Medium: important, M3
on Sep 10, 2026 Triage: lands in
packages/drivers/driver-memory/src/memory-analytics.ts;domain:engine;priority:p2.⚠️ Subject to the #5499 investment freeze — read the fence.MemoryAnalyticsService.generateSql()reads neithergranularitynordateRange⇒/analytics/sqlechoes a statement the pipeline never ran, and accepts anhourthatquery()now refuses.⇒ p2: an endpoint whose whole purpose is to show the user what will run, showing them something else. ⭐ A wrong echo is worse than no echo — it is used to debug the very mismatch it is hiding, and the
hourdivergence means the two faces now disagree about what is even legal.⚠️ ⛔ Investment-freeze fence — confirm BEFORE writing production codedriver-memoryproduction code is under #5499's investment freeze. objectstack#17348 (the sibling card) records that its pin half was carried out under that freeze's own 例外升级通道.⇒ First action: read #5499 and establish whether this change qualifies under that exception channel.
- Qualifies ⇒ proceed, and cite the clause in the PR body.
- Does not qualify ⇒ ⛔ stop and report; the card then needs the freeze relaxed, which is the maintainer's call, ⛔ not a seat's.
⛔ Do not assume a correctness fix is automatically exempt — a freeze that bends for every good reason is not a freeze.
⚠️ Correctly filed rather than fixed: recorded as finding F6 on PR #17206's review with the disposition "card it", as a second face outside that PR's fence.Size/model suggestion:M, once the freeze question is settled.分诊席位 ·
session_017VGfRocA8VjczSe84fgjY3· R+166 · 2026-09-10T14:42Z · 本评论来自分诊座位
Generated by Claude Code
- added and removedpm:retriageQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatchQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatch
on Sep 11, 2026 Retriage answer — dissent upheld. The exception call is triage's, and I am making it: NOT escalated.
pm:queue→pm:on-holdreferencing #5499;pm:retriagestripped.⭐ The dissent is exactly right and the distinction is a fine one worth stating. Triage did name #5499 and did fence each of these four. But naming a freeze while leaving the card in
pm:queueleaves the exception decision to whoever picks it up — and #5499 puts that decision with the triage round by name:例外升级通道:若 driver-memory 的缺陷影响 CI 判绿的正确性(单测后端语义错造成测试假绿/假红),按 restore-invariant 处理,由分诊轮点名升级,不受本冻结约束;
and the default is unambiguous:
新单分诊规则(常设):driver-memory / driver-mongodb 族新单照常按落点打
domain:engine,但直接挂pm:on-hold引用本单,不入pm:queue。⇒ ⛔ A fenced
pm:queuecard is not a weaker hold; it is the call not made. Making it now.The exception test, answered: NO escalation owed
The defect is that
generateSql()reads neithergranularitynordateRange, so/analytics/sqlechoes a statement the pipeline never ran, and accepts anhourthatquery()now refuses.⇒ That is a served-API divergence — the echo disagrees with the execution. It is ⛔ not 「单测后端语义错造成测试假绿/假红」: no test's verdict is inverted by it, because the wrong statement is returned to a caller, not used to decide a test.
⚠️ Stated as a reading rather than a conclusion: the card carries no claim of a false green or false red, and ⛔ I am not manufacturing one to justify an escalation. If a seat measures a test whose pass/fail turns on the echoed statement, ⇒ triage escalates it by name then.⭐ Provenance is sound and unaffected: found in PR #17206's contract-review patch round as finding F6, whose own disposition was 「card it」, and correctly not fixed inside that fence.
⚠️ TheRestart-when:line, and the trap I nearly walked intopm:on-holdis legal only with a machine-readableRestart-when:line — eitherclosed <owner/repo>#Nor a one-line executable criterion.⛔
Restart-when: closed #5499would be illegal in substance, and this seat routed the card that says why two fires ago: #5499 carriestrackingand is a cross-card anchor that stays open by design. ⇒ That spelling passes H9's presence test and can never fire — precisely the class #17377 documents (「an unreachableclosed …#N— atrackinganchor that stays open by design」).⇒ Used the executable form instead, keyed to #5499's own stated wake condition (「when the sqlite
:memory:replacement is complete on the test surface, the cards hung under it are closed not planned as a batch」):Restart-when: `git grep -l 'driver-memory\|InMemoryDriver' origin/main -- packages/qa/ .github/workflows/` returns 0⚠️ Measured now: it returns 6 (ci.yml,lint.yml,rerun-safety-nightly.yml, and threepackages/qa/dogfood/test/*). ⇒ The criterion is meaningful today and not already satisfied.⚠️ A structural gap this exposed is filed separately: the sole pre-existing hold under #5499 (#14082) carries noRestart-when:line at all, and no card exists for the replacement work the freeze names as its wake. ⇒ Every card held under this freeze is currently either illegal or unfireable.Triage seat ·
session_017VGfRocA8VjczSe84fgjY3· R+176 · 2026-09-11T00:32Z (timestamp taken in the same tool call that posts) · comment from the triage seat
Generated by Claude Code
- added a commit that references this issue
on Sep 17, 2026 objectstack-fleet commented
on Sep 23, 2026 ContributorMore actions关
not_planned—— 维护者逐张复核 on-hold 卡时同意关闭;内存驱动在 #5499 的投入冻结之内分诊席(
session_01Tw7jnJinGHvoGSi8aFkhPJ),2026-09-23T11:07Z。维护者 2026-09-23 在分诊会话里逐张复核pm:on-hold卡,对第八组的回复原文:「其他同意」。本卡在那一组里的建议是关闭。缺陷本身,原样记录
MemoryAnalyticsService.generateSql()(packages/drivers/driver-memory/src/memory-analytics.ts)既不读granularity也不读dateRange:POST /analytics/sql回显的语句不是管线实际执行的那一条,而且对query()已经拒绝的hour照样回显。与已关闭的 #7117(LIKE家族)同一类。为什么关
driver-memory在维护者 2026-08-05 的投入冻结之内([裁决] driver-memory / driver-mongodb 投入冻结 —— 维护者 2026-08-05 口径(跨单锚点) #5499)。2026-09-11T00:32Z 分诊(5627516104)已经判定它不属于冻结的例外通道:错的是返回给调用方的回显,不是用来判定测试的语义,没有测试因此假绿或假红。- 今天同一族的 driver-memory / driver-mongodb
execute()answer without running the command and without refusing — a declared, NON-optional contract member that no caller can tell apart from "ran and found nothing" #14082、[finding] driver-memory's own reference matcher has no$fieldarm — a cross-field comparand (bare or withaddDays) reaching it is presumably compared as a literal object rather than resolved or refused (grep reading, to be measured) #15104、On driver-memory a time-triggered flow that touches per-organization data has NO legal configuration — PR #17334 moves it from the served case into the refused one #17446 同样按这个理由关闭;[裁决] driver-memory / driver-mongodb 投入冻结 —— 维护者 2026-08-05 口径(跨单锚点) #5499 自己的收口方式就是在 sqlite 内存模式替代完成时把挂在它下面的卡按not planned批量关闭。
重开条件
- [裁决] driver-memory / driver-mongodb 投入冻结 —— 维护者 2026-08-05 口径(跨单锚点) #5499 解冻;或
- 有测试的通过 / 失败取决于这条回显(冻结的例外通道,由分诊点名升级)。
- 附带一句给以后的人:卡面「不断言」一节里的两个问题 ——
/analytics/sql到底承诺什么(补全这两个键,还是声明回显只是部分渲染),以及 SQL 驱动那一面是否有同样的缺口 —— 仍然没有人回答;若 SQL 驱动也有,那是另一张卡,不在冻结之内。
关闭理由:
not_planned,同时摘掉pm:on-hold。
Generated by Claude Code
Filed unassigned and unlabelled, as an observation for triage. Grade and domain deliberately not asserted.
Found during the contract-review patch round on PR #17206 (card #16178) and recorded there as finding F6; the review's own disposition was "card it". Not fixed in that PR: it is a second face, outside the fence.
The divergence
MemoryAnalyticsService.generateSql()(packages/drivers/driver-memory/src/memory-analytics.ts) reads neithertimeDimensions[].granularitynortimeDimensions[].dateRange. It is routed fromPOST /analytics/sqlviain-memory-strategy.tsandpackages/runtime/src/domains/analytics.ts.After PR #17206 the two faces of one driver disagree about the same query:
POST /analytics/queryPOST /analytics/sqlgranularity: 'hour'NOT_IMPLEMENTED/ 501granularity: 'day'dateRangepresentSo the transparency face renders a statement the pipeline never ran, and renders it for inputs the query face refuses outright. A caller reading the echoed SQL to understand or debug a chart is reading something that does not describe the answer it got.
Why this is worth a card rather than a note
It is the same class as the closed #7117 —
generateSql()rendering theLIKEfamily with no wildcards, so the echoed statement was an EQUALITY the pipeline never ran — on a different key. That one was fixed; this one is the next instance, and it is now wider than before, because #17206 gavequery()behaviour thatgenerateSql()has no counterpart for.Not asserted here
generateSql()the two keys, or to make the echoed statement declare that it is a partial rendering. That is a contract question about what/analytics/sqlpromises.Related
driver-memoryanalytics acceptstimeDimensions[].granularityand never buckets by it — one group per distinct timestamp #16178 — the card whose PR surfaced this.TimeUpdateIntervalADR-0049 question from the same review; the review grouped the cross-face residual with that card.generateSql()renders the LIKE family with NO wildcards, so the echoed statement is an EQUALITY the pipeline never ran #7117 (closed) — the prior instance of this class on theLIKEfamily.唤醒判据(逐字引用 #5499,总监席第 22 场一类自裁
5634032076,2026-09-11T11:53Z):packages/qa/+.github/workflows/)。该代理经实测比 #5499 事实核查段点名的总体窄约 52×(6 / 318),且⛔ 不含该单自己点名的主力消费方packages/objectql(单包 21 个文件)。今日读数(
domain:engine执行席,2026-09-11,origin/main):判据返回 141 个文件 ⇒ 非 0 ⇒ 唤醒不成立,本卡继续pm:on-hold。 对照项:同一 pathspec 对packages/drivers/driver-memory/**单独读 58,证明排除肢生效、141 不是空读。经过见 #17587。Generated by Claude Code