Skip to content

Commit a169559

Browse files
docs(qa): summary-field-authoring revision 3 — a count roll-up carries no summaryOperations.field (#27955)
Fixes #27608 Clause-②: no Metadata-protocol: none ## 维护者速读 - 改了什么:QA 清单条目 `studio-authoring.summary-field-authoring` 升到 revision 3:验收第 3 条改为 count 汇总只带 `object` 与 `function`、不带 `field`,sum 汇总仍带三者;补一条 history。 - 为什么改:#27533 已让 count 汇总在不写 `summaryOperations.field` 时也能保存,Studio 在 count 下不再给出字段控件;旧条款要求两个汇总都带 field,会把正确的运行判为失败。 - 风险与回滚:只改一份 QA 清单 JSON 的一个条目,不涉及任何发布包或运行时;回滚即还原本 PR。 - 先看:`docs/qa/platform-checklist/areas/studio-authoring.json` 中该条目的 `acceptance[2]`(clause 与 verify 两行)和新增的 history revision 3。 - 两分钟验证:`pnpm check:platform-checklist`,应见 `check-platform-checklist: OK — 16 areas, 352 items`,退出码 0。 - 需要你做的:无,席位落地。 ## What changes One item, `studio-authoring.summary-field-authoring` in `docs/qa/platform-checklist/areas/studio-authoring.json`, revision 2 to 3: - `acceptance[2].clause`: was "the configured summary is saved spec-valid: summaryOperations { object, field, function }". Now the count's `summaryOperations` is `{ object, function }` with no `field`, and the sum's is `{ object, field, function }`. - `acceptance[2].verify`: was "carries both summaries with the authored object, field and function". Now the count carries the authored object and function and no `field` key, and the sum carries all three. A parenthetical tells the runner to author the count as count from the start. Studio shows no field control for count, but it keeps a `field` that was already stored when a summary is switched to count. The spec accepts that field and ignores it. - `revision` 3, plus a `history` entry in the file's existing `{ revision, date, change, ref }` shape. The entry cites #27533 (`fbb8bec3e7`) and this card. No other clause, step, fixture, negative or source line changed. ### Premise, measured at `origin/main` `ed0e71db94` - `fbb8bec3e7` (#27533) is an ancestor of the base (`merge-base --is-ancestor` exit 0). - `packages/spec/src/data/field.zod.ts`: `summaryOperations.field` is `z.string().optional()`. Its describe reads "Required for sum, min, max and avg; count counts the child rows and reads no field, so a count may omit it (ignored when given)". `refuseSummaryWithoutField` refuses a missing `field` only when `summaryFunctionReadsField(function)` is true, which is every function except `count`. - `ObjectFieldInspector.tsx` `SummaryConfigFields`: the field combo renders only when `summaryFunctionReadsField(fn)` is true. Its comment says "A `field` already stored on a count is left as it is (ignored), so switching back keeps it". So a count authored as count saves with no `field` at all. A summary switched to count keeps any `field` it already had. ## Tests No code changed. No test applies. ## Acceptance notes - `fixtures.knownGaps[0]` (acceptance[0] and [1] fail today) is untouched. #27533 changed neither the hold nor the numeric-only picker. ## Verification <details><summary>Derived gates at head 6521b16: 16 derived, 16 run, all exit 0</summary> `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` derived 16 commands, and each exit code was captured before any pipe: ```text node scripts/check-adr-links.mjs :: exit 0 node scripts/check-adr-links.mjs --self-test :: exit 0 node scripts/check-closing-keyword-parity.mjs :: exit 0 node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0 node scripts/check-comment-mask-corpus.mjs :: exit 0 node scripts/ci/plan-test-core-shards.mjs --self-test :: exit 0 pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0 (first run exit 3, a prerequisite refusal; re-run after building @objectstack/formula and @objectstack/lint) pnpm check:ci-filter-parity :: exit 0 pnpm check:cross-package-test-inputs :: exit 0 pnpm check:doc-authoring :: exit 0 pnpm check:driver-memory-census :: exit 0 pnpm check:gitlink-declared :: exit 0 pnpm check:nul-bytes :: exit 0 pnpm check:platform-checklist :: exit 0 pnpm check:refd-timer-probe :: exit 0 pnpm check:watch-hint-literal :: exit 0 ``` `check:platform-checklist`: `check-platform-checklist: OK — 16 areas, 352 items (347 active, 1 planned)`. `--ran` reconciliation: `16 derived famil(ies) accounted for — 16 run, 0 NOT-MEASURED (a DERIVED zero — all 16 recorded an exit code and none of them is 3)`. </details> --- _Generated by [Claude Code](https://claude.ai/code/session_01QSeKYmTYfaPbLQD4BJfomW)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 4454c5b commit a169559

1 file changed

Lines changed: 9 additions & 3 deletions

File tree

‎docs/qa/platform-checklist/areas/studio-authoring.json‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2832,7 +2832,7 @@
28322832
"title": "A summary (roll-up) field authored in Studio is held until it names its child object and function, offers only numeric child fields for sum and avg, and once published computes and recomputes from the children",
28332833
"since": "v18",
28342834
"status": "active",
2835-
"revision": 2,
2835+
"revision": 3,
28362836
"priority": "P2",
28372837
"surface": "mixed",
28382838
"personas": [
@@ -2868,9 +2868,9 @@
28682868
"evidence": "the picker DOM"
28692869
},
28702870
{
2871-
"clause": "the configured summary is saved spec-valid: summaryOperations { object, field, function }",
2871+
"clause": "the configured summaries are saved spec-valid: the count's summaryOperations is { object, function } with no field (count counts the child rows and reads no field), the sum's is { object, field, function }",
28722872
"oracle": "api",
2873-
"verify": "GET /api/v1/meta/object/PARENT carries both summaries with the authored object, field and function",
2873+
"verify": "GET /api/v1/meta/object/PARENT carries both summaries: the count with the authored object and function and no field key, the sum with the authored object, field and function (author the count as count from the start: Studio offers no field control for count but keeps a field already stored when a summary is switched to count, which the spec accepts and ignores)",
28742874
"evidence": "the meta read"
28752875
},
28762876
{
@@ -2906,6 +2906,12 @@
29062906
"date": "2026-10-28",
29072907
"change": "fixtures.knownGaps[0], negative[0] and source[2] re-read against main 3230bdbf: #26707 is closed by 57820085, which makes the draft read's _diagnostics report the publish verdict, but the Data pillar still saves an unconfigured summary rather than holding it, and the sum/avg picker still offers non-numeric fields — acceptance[0] and [1] still fail, now cited to the run alone. No clause changed",
29082908
"ref": "#26848"
2909+
},
2910+
{
2911+
"revision": 3,
2912+
"date": "2026-10-30",
2913+
"change": "acceptance[2] re-pointed after #27533 (fbb8bec3e7), which lets a count roll-up save without summaryOperations.field and stops Studio offering the field control for count: the count summary now carries object and function with no field, the sum summary still carries object, field and function. The old clause and verify (both summaries carry \"the authored object, field and function\") would score a correct run as a failure",
2914+
"ref": "#27608"
29092915
}
29102916
]
29112917
},

0 commit comments

Comments
 (0)