You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Findings triage round (#4949 discipline): PROMOTED out of finding — to the decision inbox, not to the queue.finding removed; needs-user-decision + domain:spec + target:v17 applied.
This issue was filed 10:04Z carrying finding and no domain:* — invisible to every lane until routed. Routing it is the substantive act here.
Routing rationale (landing site)
domain:spec. The declared surface is AggregationFunction at packages/spec/src/data/query.zod.ts:110 (verified on origin/main), and all three options land there: A adds a capability matrix beside it, B retires three enum members from it, C adds a backend-availability bit to it. The driver-side compilers (SqlDriver.mapAggregateFunc, RemoteTransport.aggregate, mongodb-aggregation.ts, memory-analytics.ts) are consumers of that enum — the runtime half is already separately in flight as #5907 (pm:dispatched, domain:drivers, target:v17), and the 2026-08-06 triage split that kept the two apart is respected here.
Why not pm:queue
The three options are mutually exclusive and B — the ADR-0049 default route — would remove a shipped capability: count_distinct is implemented today by driver-mongodb and driver-memory, so retiring the enum members takes working functionality away from two backends. Step 0 names "removing a shipped capability" as needs-user-decision explicitly, and no dev agent can pick among A/B/C without guessing at product appetite. This is not a dead-key retirement the spec-property-retirement playbook can execute unattended — the liveness ledger would not return dead for keys with live implementations.
Why not finding (why it leaves the held state)
A finding is an observation with no user-visible bite today. This one bites today and the bite is documented in the same file: query.zod.ts:78 tells the author "count_distinct: Count unique values (SQL: COUNT(DISTINCT field))" — a promise the SQL backend does not keep. An author copying the schema's own documentation against a SQL backend fails. That is a defect card awaiting a direction, not an observation.
Release board
target:v17 on criterion ② and ④: the authorable schema declares eight aggregation functions and its own prose promises a SQL translation for one that no SQL backend compiles — declared ≠ enforced on shipped spec, and "copy what the docs say, watch it fail" in the first hour. Matches the label its runtime half #5907 already carries.
Stale-premise check
packages/spec/src/data/query.zod.ts has one commit since 2026-08-06 20:00Z (7f713b66, ADR-0122 XParsed naming — unrelated to the enum). The eight-member enum and the three unimplemented members are unchanged on origin/main.
Maintainer ruling — 2026-08-07. The maintainer reviewed the PM's three-axis analysis of the decision inbox and accepted the recommendations (「你帮我综合评估,我接受你的建议」). Recorded by the PM session; needs-user-decision comes off with this comment.
Decision: split the three keys.
array_agg / string_agg — retire from AggregationFunction (ADR-0087 route). Display conveniences with heavy dialect divergence and zero measured pull.
count_distinct — keep and enforce: implement in the SQL family (SqlDriver.mapAggregateFunc + RemoteTransport.aggregate). It is a dashboard staple with a trivial SQL lowering (COUNT(DISTINCT x)).
Option C (per-backend capability bits) is rejected — #5240 already refused ad-hoc exception machinery, and after this split it is unnecessary: every remaining declared function is enforced by the SQL family, so declared = enforced without a capability matrix.
Scope notes:
This card keeps the spec retirement half (2 keys out). The count_distinct SQL implementation is filed as its own card (drivers side) — the declaration stays, enforcement catches up.
Activity
claude commentedon Aug 7, 2026
Findings triage round (#4949 discipline): PROMOTED out of
finding— to the decision inbox, not to the queue.findingremoved;needs-user-decision+domain:spec+target:v17applied.This issue was filed 10:04Z carrying
findingand nodomain:*— invisible to every lane until routed. Routing it is the substantive act here.Routing rationale (landing site)
domain:spec. The declared surface isAggregationFunctionatpackages/spec/src/data/query.zod.ts:110(verified onorigin/main), and all three options land there: A adds a capability matrix beside it, B retires three enum members from it, C adds a backend-availability bit to it. The driver-side compilers (SqlDriver.mapAggregateFunc,RemoteTransport.aggregate,mongodb-aggregation.ts,memory-analytics.ts) are consumers of that enum — the runtime half is already separately in flight as #5907 (pm:dispatched,domain:drivers,target:v17), and the 2026-08-06 triage split that kept the two apart is respected here.Why not
pm:queueThe three options are mutually exclusive and B — the ADR-0049 default route — would remove a shipped capability:
count_distinctis implemented today bydriver-mongodbanddriver-memory, so retiring the enum members takes working functionality away from two backends. Step 0 names "removing a shipped capability" asneeds-user-decisionexplicitly, and no dev agent can pick among A/B/C without guessing at product appetite. This is not a dead-key retirement thespec-property-retirementplaybook can execute unattended — the liveness ledger would not returndeadfor keys with live implementations.Why not
finding(why it leaves the held state)A finding is an observation with no user-visible bite today. This one bites today and the bite is documented in the same file:
query.zod.ts:78tells the author "count_distinct: Count unique values (SQL: COUNT(DISTINCT field))" — a promise the SQL backend does not keep. An author copying the schema's own documentation against a SQL backend fails. That is a defect card awaiting a direction, not an observation.Release board
target:v17on criterion ② and ④: the authorable schema declares eight aggregation functions and its own prose promises a SQL translation for one that no SQL backend compiles — declared ≠ enforced on shipped spec, and "copy what the docs say, watch it fail" in the first hour. Matches the label its runtime half #5907 already carries.Stale-premise check
packages/spec/src/data/query.zod.tshas one commit since 2026-08-06 20:00Z (7f713b66, ADR-0122XParsednaming — unrelated to the enum). The eight-member enum and the three unimplemented members are unchanged onorigin/main.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
os-project-manager commentedon Aug 7, 2026
Maintainer ruling — 2026-08-07. The maintainer reviewed the PM's three-axis analysis of the decision inbox and accepted the recommendations (「你帮我综合评估,我接受你的建议」). Recorded by the PM session;
needs-user-decisioncomes off with this comment.Decision: split the three keys.
array_agg/string_agg— retire fromAggregationFunction(ADR-0087 route). Display conveniences with heavy dialect divergence and zero measured pull.count_distinct— keep and enforce: implement in the SQL family (SqlDriver.mapAggregateFunc+RemoteTransport.aggregate). It is a dashboard staple with a trivial SQL lowering (COUNT(DISTINCT x)).Option C (per-backend capability bits) is rejected — #5240 already refused ad-hoc exception machinery, and after this split it is unnecessary: every remaining declared function is enforced by the SQL family, so declared = enforced without a capability matrix.
Scope notes:
count_distinctSQL implementation is filed as its own card (drivers side) — the declaration stays, enforcement catches up.Unsupported aggregate function两面都是裸Error(code/status 皆 undefined),且三个 spec 已声明的聚合函数无任何 SQL 后端编译 #5907 (runtime capability-gap envelope wording): once both halves land, the "declared but this backend cannot" message no longer has a subject among these keys — noted there when the retirement merges.Generated by Claude Code
fix(driver-mongodb): refuse retired array_agg / string_agg instead of…
fix(driver-mongodb): refuse the retired array_agg / string_agg instea…
fix(scripts,spec): doc-authoring Rule 3 reaches refusal prose built i…
fix(spec): the protocol 16 → 17 conversion summaries and three descri…
fix(spec): conformance-case notes and names state each decision in wo…