Skip to content

refactor(spec)!: retire array_agg / string_agg from AggregationFunction — count_distinct kept - #6527

Merged
qq9340100 merged 2 commits into
mainfrom
claude/issue-6188-aggregation-split-retire
Aug 8, 2026
Merged

refactor(spec)!: retire array_agg / string_agg from AggregationFunction — count_distinct kept#6527
qq9340100 merged 2 commits into
mainfrom
claude/issue-6188-aggregation-split-retire

Conversation

@qq9340100

Copy link
Copy Markdown
Collaborator

Fixes#6188

维护者 2026-08-07 拆分裁决的 spec 退役半边:array_agg / string_agg 退役;count_distinct 保留(SQL 实现是 drivers 侧独立卡,本单未做);mongodb / memory 实现在 #5499 冻结内,未触。

路线判定(决定读数预期)

枚举 VALUE 收窄,非 authorable KEY 退役:无 retiredKey() 墓碑——处方挂在枚举 error map 上按 issue.input 分派,只有曾合法的两个拼写被告知 "was removed"(#4391 先例);不进 RETIRED_KEYS_BY_MAJOR;四张 ratchet 字节相同是本路线的正确读数(变化的生成物是 spec-changes.json、protocol-upgrade-guide 与四个 references 页);ADR-0122 pin 注册表无 AggregationFunction 条目,计数无需动。

处方与 ADR-0087 登记

  • ARRAY_AGG_RETIRED / STRING_AGG_RETIRED 按房规五段式(全限定名 → removed in 17 → 为何本就无效[SQL 族只编译五个;v1 dataset runtime 不减名会落到 Cube defaultCOUNT(*) 拿行数冒充数值] → 祈使句[string_agg 额外说明三家方言分隔符形状不可统一 lower] → os migrate meta --from 16)。
  • D2 conversion dataset-measure-array-string-agg-removed(toMajor 17):整条 measure 删除而非剥 aggregate(空 measure 过不了 superRefine),被牵连的 derived 按不动点清理,每删一条发 notice(fixture expectedNotices=4)。
  • D3 semantic entry:QueryAST.aggregations[].function 是请求面,无源可改写。

消费半径(被 tsc 逼出的随动)

objectql in-memory 两条 case 臂删除;service-analytics 的 UNSUPPORTED_AGGREGATES空集保留(lockstep 算术的一半,refusal 分支留作下一个未 lower aggregate 的落点并注明当前不可达);driver-sql / driver-turso 两名字从 class 2(501)移到 class 1(400)——两处测试注释当初就写着等本单来炸,turso parity 表改钉新答案逐字一致;rest 见下。未触 driver-mongodb / driver-memory(自带 function: string,无编译耦合,spec-valid 请求已不可达)。

实测发现(非预测)

  1. REST 路由 refusal 换 producer:aggregate: 'string_agg' 退役前 400 DATASET_INVALID(compiler 信封)、退役后 400 VALIDATION_FAILED(路由 DatasetSchema.parse)。envelope 测试第①行改钉继任答案并写明该分支在空集下端到端不可达(②–⑤ 行继续扛保证)——把真相写下而非造合成 aggregate 维持旧形状。
  2. 处方在该路由被截到 1000 字符:实测两句关键指令(was removed / 祈使句)均在截断线内送达。

交付通道注记

云端工头 A 会话(session_01Wd2qncNzNCfxYYeuNrkc53)无 GitHub 工具,走交付降级通道:dev 实现并 push 分支,PM(session_011M7UwH25Unfi73UHim7ajY)代开本 PR 并跟进 CI 至合并。完整验证读数见分支尾 commit message。


Generated by Claude Code

…on — count_distinct kept (#6188)
维护者 2026-08-07 拆分裁决的 spec 退役半边。`count_distinct` 保留(SQL 实现
是 drivers 侧独立卡,本单未做);mongodb / memory 实现在 #5499 冻结内,未触。
## 前提核验(对 origin/main @ 1818998)
- `packages/spec/src/data/query.zod.ts:108` 的 `AggregationFunction` 仍是 8 成员,
三个未被 SQL 族编译的成员俱在。
- issue #6188 评论区 2026-08-07 16:59Z 维护者裁决在册,未被后续评论推翻;PM 认领
评论(2026-08-08 02:02Z)指定的分支名与本分支一致。
- 前提成立,照裁决执行。
## 路线判定(这决定了该期待什么读数)
这是**枚举 VALUE 收窄**,不是 authorable KEY 退役。因此按 playbook:
- 无 `retiredKey()` 墓碑 —— 处方挂在枚举自己的 error map 上,按 `issue.input`
分派,只有「曾经合法」的两个拼写才被告知 "was removed"(`crypto.hash` /
`HookBodyCapability` 先例,#4391);拼错的 `arry_agg` 仍拿 zod 的合法值列表。
- 不进 `RETIRED_KEYS_BY_MAJOR`(那张表登记 authorable key)。
- **四张 ratchet 字节完全相同,这是本路线的正确读数**,不是漏做:
`api-surface/`、`authorable-surface/`、`json-schema.manifest/`、
`api-surface-signatures.json` 全部零变化,`check:authorable-surface` /
`check:api-surface` 绿。变化的生成物是 `spec-changes.json`、
`docs/protocol-upgrade-guide.md` 与四个 references 页。
- **ADR-0122 pin 注册表未触及**:`type-alias-convention.pin.test.ts` 里没有
`AggregationFunction` 的 pin(在册的是 AggregationStage / AggregationPipeline /
AggregationNode / MetricAggregationType,均为 def 级,未变),所以没有要删的行、
也没有 :1491 附近的硬编码计数需要同步。
## 两个退役键的墓碑说什么
处方(`ARRAY_AGG_RETIRED` / `STRING_AGG_RETIRED`,query.zod.ts)按房规五段式:
反引号全限定名 → `was removed in @objectstack/spec 17 (#6188, ADR-0049
enforce-or-remove)` → 为何本就无效(`SqlDriver.mapAggregateFunc` 与
`RemoteTransport.aggregate` 各只编译五个;v1 dataset runtime 还得按名字把它们减掉,
否则会落到 Cube strategy 的 `default` 返回 `COUNT(*)` —— 拿行数冒充作者要的数值)
→ 祈使句(删掉这条 aggregation / dataset measure;`string_agg` 额外说明它的方言分歧
最大,分隔符在 PostgreSQL 是第二参数、MySQL 是 `SEPARATOR`、SQL Server 是另一个函数名,
所以从来没有一个可 lower 的形状)→ `Run os migrate meta --from 16`。
## ADR-0087 登记
- D2 conversion `dataset-measure-array-string-agg-removed`(toMajor 17,
`retiredFromLoadPath: true`):唯一的**存量**作者面是
`dataset.measures[].aggregate`。整条 measure 被删除而不是只剥掉 `aggregate` ——
既无 `aggregate` 又无 `derived` 的 measure 过不了 dataset 自己的 superRefine,
产出无法 parse 的条目比不转换更糟;被删 measure 牵连的 derived measure 按不动点
一并清理(derived 可以引用 derived)。每删一条发一条 notice。fixture
expectedNotices=4(两个退役 aggregate + 两条被牵连的 derived)。
- D3 semantic entry `query-array-string-agg-retired`:`QueryAST.aggregations[].function`
是**请求面**,从不入 stack metadata(与 `query.joins` / `cursor` / `distinct` 同类),
没有源可改写。
- chain step:id 已挂进 `MIGRATIONS_BY_MAJOR[17].conversionIds`,rationale 已扩写。
## 消费半径(按规则的 consumption radius 扫,不是按包)
被 tsc 逼出来、必须随动的:
- `objectql/in-memory-aggregation.ts`:删掉两条 case 臂(枚举没有的值做 switch case
不过编译),模块能力注释同步;测试改为 pin「fallback 不再计算它们」。
- `service-analytics`:`UNSUPPORTED_AGGREGATES` 现为**空集且保留** —— 它是 lockstep
套件强制的算术的一半(SUPPORTED = spec 词表 − 它),那条算术正是拦住「下一个加进
spec 的 aggregate 悄悄落到 COUNT(*)」的东西;refusal 分支保留为下一个未 lower
aggregate 的落点,并在注释里写明当前不可达。
- `driver-sql` / `driver-turso`(**不在 #5499 冻结范围**):两个名字从 class 2
(declared-but-uncompiled → 501)移到 class 1(undeclared → 400)。这两个测试当初
就写好了迎接本单——注释原文写着「a name that leaves the enum when #6188 is decided
— fails tsc」,实测正是这样炸出来的。turso 的 parity 表里两个条目从 `declaredAst`
换成 `undeclaredAst`:要守住的性质是两张脸对**新答案**依然逐字一致。
- `rest`:见下面的实测发现。
**未触**(裁决与 #5499 冻结):`driver-mongodb`、`driver-memory` 的实现。两者都用
自己的 `function: string`,不与 spec 枚举耦合,因此也没有编译压力——代码原样保留,
只是不再能通过一个 spec-valid 的请求抵达。
## 实测发现(不是预测)
1. **REST 路由上这条 refusal 换了 producer**:
`POST /analytics/dataset/query` 携带 `aggregate: 'string_agg'`,退役前是
`400 DATASET_INVALID`(dataset-compiler 的信封),退役后是 `400 VALIDATION_FAILED`
(路由自己的 `DatasetSchema.parse`)。status 不变,code 变了。
`analytics-dataset-refusal-envelope.test.ts` 的那一行保留(它的 `listEntry` 是
#5367 删掉的五条正则的审计线索),但改为 pin 继任答案,并写明:该行**不再能**
证明路由会给 compiler 的 aggregate refusal 套信封——那条分支在
`UNSUPPORTED_AGGREGATES` 为空时端到端不可达;②–⑤ 行仍然扛着这个保证。
与其造一个合成 aggregate 维持旧形状,不如把真相写下来。
2. **处方在这条路由上被截断**:路由把 parse 错误放进 `detail` 并截到 1000 字符
(`rest-server.ts:7049`)。zod 包装后的消息 `array_agg` 1076 字符、`string_agg`
1304 字符,所以作者必须行动的两句都进得去(`was removed` 在 ~192、
`Delete the aggregation` 在 690 / 918),**收尾的 `os migrate meta --from 16`
一句被截掉**,只在这个面上。tsc 报错、直接 `DatasetSchema.parse`、`os validate`
上处方完整。已加测试把这个截断量到位(断言 detail.length === 1000 且不含
`os migrate meta`),抬 cap 或改结构化 issues 是 REST 车道对**所有**长处方的决定,
不是本词表该顺手做的。见下方范围外发现。
## 反向验证(方向先写后跑)
预测:只删掉 error map、保留收窄后的枚举 → 四条处方测试变红,其余(名单 pin、
count_distinct 正例)保持绿——证明处方测试测的是 error map,而不只是「拒绝了」。
实测:`4 failed | 82 passed`,红的正是那四条。已还原。
## 验证读数(全部前台阻塞执行)
- `pnpm --filter @objectstack/spec test` → 340 files / 8717 tests passed
- spec 门禁全绿:check:generated / authorable-surface / docs / api-surface /
spec-changes / upgrade-guide / skill-refs / skill-docs / skill-examples /
liveness / empty-state / variant-docs / strictness-ledger
- typecheck 绿:spec(含 scripts + test 层)、objectql、lint、client、mcp、
metadata-protocol、driver-sql、driver-turso、driver-mongodb、driver-memory
- 测试绿:objectql 146/2449、service-analytics 68/1390、driver-sql 69/959、
driver-turso 27/828、rest 64/885、dogfood expression-conformance 1/3
- `pnpm lint` EXIT=0;`check:adr-0087-registration`、`check:i18n`(补建 CLI 后
9 包 bundle in sync)、check:doc-authoring / role-word / quick-reference-counts /
skill-compatibility / adr-anchors / empty-changeset / release-notes /
engine-double-contract / error-code-casing / route-envelope 全 PASS
- `node scripts/check-nul-bytes.mjs` OK;改动文件控制字符自扫无命中
- ⛔ `content/docs/releases/` 未触
## 两处需要 PM 裁量的地方
1. **changeset 用了 `major`,不是派单说的 `minor`。** 派单写「@objectstack/spec
minor(退役面)」,但 playbook 明写退役是 `major`,且树内三个同类先例
(query-distinct-removed / tool-inert-keys-removed /
metadataformat-cachestrategy-single-declaration)都是 `major`;本变更确实是破坏性
收窄(导出枚举少两个取值,`AggregationFunction` 的 TS input 类型随之变窄,
`dataset.measures[].aggregate` 不再接受)。写 `minor` 会在发布的 CHANGELOG 里
留下一个失真的 semver 声明,所以按正确语义落了 `major` 并在此声明偏差——
PM 若坚持 minor,改 `.changeset/aggregation-array-string-agg-removed.md`
第 2 行一处即可。
2. **范围外发现,未在本 PR 修**(drivers 车道 / #5907 的措辞):
`driver-sql/src/sql-driver.ts:613` 与 `driver-turso/src/remote-transport.ts:590`
的 wire 文案仍写着「whether the declaration itself should stand is #6188
(ADR-0049 enforce-or-remove)」。#6188 已裁决:两个退役、`count_distinct` 保留待
实现,所以这句对唯一剩下的成员已经过时。两张脸的文案受 #5240「一个条件一种措辞」
约束且有逐字 parity 测试,改动属 #5907 那张卡,本单只更新了两处 docblock、
未动 wire 文案。另,上面第 2 条实测的 REST `detail` 1000 字符截断,是对**所有**
长处方生效的路由级行为,同样建议在 REST 车道单独立卡。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wd2qncNzNCfxYYeuNrkc53
@vercel

vercelBot commented Aug 8, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectstackIgnoredIgnoredAug 8, 2026 3:16am

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 5 package(s): @objectstack/driver-sql, @objectstack/driver-turso, @objectstack/objectql, @objectstack/service-analytics, @objectstack/spec.

120 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx(via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx(via @objectstack/spec)
  • content/docs/ai/skills.mdx(via @objectstack/spec)
  • content/docs/api/client-sdk.mdx(via @objectstack/spec)
  • content/docs/api/data-api.mdx(via @objectstack/service-analytics)
  • content/docs/api/environment-routing.mdx(via @objectstack/spec)
  • content/docs/api/error-catalog.mdx(via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx(via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx(via @objectstack/spec)
  • content/docs/api/index.mdx(via @objectstack/service-analytics, @objectstack/spec)
  • content/docs/automation/approvals.mdx(via @objectstack/spec)
  • content/docs/automation/connectors.mdx(via @objectstack/spec)
  • content/docs/automation/flows.mdx(via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx(via packages/spec)
  • content/docs/automation/hooks.mdx(via @objectstack/spec)
  • content/docs/automation/index.mdx(via @objectstack/spec)
  • content/docs/automation/webhooks.mdx(via @objectstack/spec)
  • content/docs/automation/workflows.mdx(via @objectstack/spec)
  • content/docs/concepts/architecture.mdx(via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx(via packages/spec)
  • content/docs/concepts/index.mdx(via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx(via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx(via @objectstack/objectql, packages/spec)
  • content/docs/concepts/north-star.mdx(via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx(via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx(via @objectstack/driver-sql, @objectstack/driver-turso, @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx(via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx(via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx(via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx(via packages/objectql, @objectstack/spec)
  • content/docs/data-modeling/index.mdx(via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx(via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx(via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx(via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx(via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx(via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx(via @objectstack/spec)
  • content/docs/deployment/cli.mdx(via @objectstack/driver-turso, @objectstack/spec)
  • content/docs/deployment/environment-variables.mdx(via @objectstack/driver-turso)
  • content/docs/deployment/migration-from-objectql.mdx(via @objectstack/objectql)
  • content/docs/deployment/self-hosting.mdx(via @objectstack/driver-turso)
  • content/docs/deployment/tenancy-modes.mdx(via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx(via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx(via @objectstack/spec)
  • content/docs/deployment/vercel.mdx(via @objectstack/objectql)
  • content/docs/getting-started/build-with-claude-code.mdx(via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx(via @objectstack/spec)
  • content/docs/getting-started/examples.mdx(via @objectstack/spec)
  • content/docs/getting-started/glossary.mdx(via @objectstack/driver-sql, @objectstack/driver-turso)
  • content/docs/getting-started/quick-reference.mdx(via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx(via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx(via @objectstack/spec)
  • content/docs/kernel/cluster.mdx(via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx(via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx(via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx(via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx(via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx(via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx(via @objectstack/spec)
  • content/docs/kernel/index.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx(via @objectstack/spec)
  • content/docs/kernel/runtime-services/email-service.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/examples.mdx(via packages/objectql, @objectstack/spec)
  • content/docs/kernel/runtime-services/index.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx(via @objectstack/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx(via @objectstack/spec)
  • content/docs/kernel/services-checklist.mdx(via @objectstack/driver-sql, @objectstack/objectql, @objectstack/service-analytics, @objectstack/spec)
  • content/docs/kernel/services.mdx(via @objectstack/objectql, @objectstack/spec)
  • content/docs/permissions/authentication.mdx(via @objectstack/objectql)
  • content/docs/permissions/authorization.mdx(via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx(via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx(via @objectstack/spec)
  • content/docs/permissions/positions.mdx(via @objectstack/spec)
  • content/docs/permissions/rls.mdx(via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx(via @objectstack/service-analytics, @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx(via @objectstack/spec)
  • content/docs/plugins/anatomy.mdx(via @objectstack/driver-sql)
  • content/docs/plugins/development.mdx(via @objectstack/spec)
  • content/docs/plugins/index.mdx(via @objectstack/objectql, @objectstack/spec)
  • content/docs/plugins/packages.mdx(via @objectstack/driver-sql, @objectstack/driver-turso, @objectstack/objectql, @objectstack/service-analytics, @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx(via @objectstack/spec)
  • content/docs/protocol/diagram.mdx(via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx(via @objectstack/driver-sql, @objectstack/objectql, @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx(via @objectstack/driver-sql, @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx(via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx(via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx(via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx(via @objectstack/driver-sql, packages/objectql, @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx(via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx(via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx(via @objectstack/objectql, @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx(via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx(via @objectstack/driver-sql, @objectstack/objectql, @objectstack/service-analytics, @objectstack/spec)
  • content/docs/releases/index.mdx(via @objectstack/spec)
  • content/docs/releases/v12.mdx(via @objectstack/spec)
  • content/docs/releases/v13.mdx(via @objectstack/spec)
  • content/docs/releases/v16.mdx(via @objectstack/spec)
  • content/docs/releases/v17.mdx(via @objectstack/service-analytics, @objectstack/spec)
  • content/docs/releases/v9.mdx(via @objectstack/service-analytics, @objectstack/spec)
  • content/docs/ui/actions.mdx(via @objectstack/spec)
  • content/docs/ui/apps.mdx(via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx(via @objectstack/spec)
  • content/docs/ui/dashboards.mdx(via @objectstack/spec)
  • content/docs/ui/field-grouping-and-order.mdx(via @objectstack/spec)
  • content/docs/ui/forms.mdx(via @objectstack/spec)
  • content/docs/ui/index.mdx(via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx(via @objectstack/spec)
  • content/docs/ui/setup-app.mdx(via @objectstack/spec)
  • content/docs/ui/translations.mdx(via @objectstack/spec)
  • content/docs/ui/views.mdx(via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

…irement
The two ledger entries were registered in the same commit; the gate
requires the answer in writing on the changeset itself (#6148).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY
@qq9340100
qq9340100 added this pull request to the merge queueAug 8, 2026
Merged via the queue into main with commit 259459dAug 8, 2026
26 checks passed
@qq9340100
qq9340100 deleted the claude/issue-6188-aggregation-split-retire branch August 8, 2026 03:43
qq9340100 pushed a commit that referenced this pull request Aug 8, 2026
manifest 相对 origin/main 的删除仍恰为本 sweep 的 23 个 def、零新增;
#5933 的 SpecifierValueDomain 与 #6527 的 array_agg/string_agg 退役均完整存活。
ADR-0122 pin:755 → 748。
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationprotocol:dataprotocol:uisize/lteststooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[spec] AggregationFunction 声明 8 个,SQL 族只实现 5 个 —— count_distinct / array_agg / string_agg 按 ADR-0049 enforce-or-remove 定去留

2 participants

@qq9340100@claude