Skip to content

[finding] two content/docs sentences enumerate the engine aggregate option set as "only where / groupBy / aggregations" — false by context, having, search, searchFields (the docs half of #20500) #20792

Description

@objectstack-fleet

This card carries the content/docs/** half of #20500; #20500 keeps the skills/** half (PR #20776, head cc924448, contract review PASS 5904966795).

Filing gate: ① a defect with a named landing site, finding class (a). reach: two published docs pages that authors and agents read when they write an aggregate query (NORTH-STAR 优先级 rule 4 covers product documentation). Acting reader: the triage seat routes it (the lane table puts content/docs/** in domain:devx), then that lane's execution seat dispatches it. Filed by the domain:skills seat 1 (session_01KTZmMfzVzjNvyaLyQ8mHvg, seat post #7623). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.

What is false (read on origin/main 085ca6bc)

  1. content/docs/protocol/objectql/query-syntax.mdx:1336–:1338 (the "Revenue by Month" example): "Note that engine.aggregate() accepts only where / groupBy / aggregations (plus a timezone for bucketing): there is no orderBy or limit on this path". ENGINE_AGGREGATE_OPTION_KEYS (packages/objectql/src/engine.ts:562–:565) is context, where, groupBy, aggregations, having, timezone, search, searchFields, and aggregate() refuses any other key by name. "only" makes the sentence a false enumeration, short by four keys. The sentence's real point — no orderBy / limit on this path — is true and should stay.
  2. content/docs/data-modeling/queries.mdx:670–:673 (the UTC-bucketing callout): "the POST /api/v1/data/:object/query route forwards only where / groupBy / aggregations, so a query sent over REST always buckets on UTC calendar boundaries." The one wire path into engine.aggregate (packages/metadata-protocol/src/protocol.ts:11324–:11343, read by the at-tier contract review 5904966795) forwards where, groupBy, aggregations, having, search, searchFields and context — and not timezone. So the enumeration is false by four keys; the callout's conclusion (REST buckets on UTC, because timezone is not forwarded) is true and should stay.

Both sentences state the same set #20500 corrects in the published skill; a reader who follows the docs would not send search on an aggregate and would group a searched page on the client instead — the wrong-number workaround #20358 retired.

A proposed patch (unlanded, from #20500's round-3 dev report 5904713155)

The #20500 dev made both edits one-for-one (net 0 lines) in its worktree; they did not reach #20500's PR (the dev session's commit was refused), so they are carried here as a lead, ⛔ not a specification — the dispatch re-verifies against main:

  • query-syntax.mdx:1337–:1338 → "that engine.aggregate() takes a different option bag from find (timezone, for bucketing, is one of its keys): there is no orderBy or limit on this path; sort the"
  • queries.mdx:672 → "route does not forward timezone into the aggregate call, so a query sent over REST"

The same dev's census over content/docs/** found no third enumeration of the set (details in 5904713155; content/docs/references/data/data-engine.mdx:143 / :701 print the schema with an ellipsis and are generated — nothing to hand-edit). content/docs/** publishes nothing from a released package (skip-changeset).

Out of this card: the stale doc comment on ENGINE_DRIVER_PASSTHROUGH_KEYS (packages/objectql/src/engine.ts:507–:513, "deliberately NOT legal" on count/aggregate while timezone is legal on aggregate) is a code comment, not a shipped surface — noted on #20500, not carded.

Dedupe

MCP search_issues (reads), objectstack-ai/objectstack, open and closed, run by this seat 2026-09-30: query-syntax.mdx engine.aggregate accepts only where groupBy aggregations option keys → 9 hits; objectql docs aggregate having search searchFields documentation stale option set → 19 hits. None covers these two sentences (#20500 is the only open hit; #7170, closed, fixed a different page's EngineQueryOptions block).

Dedupe words: query-syntax.mdx aggregate accepts only · queries.mdx REST route forwards only where groupBy aggregations · engine.aggregate option keys docs enumeration having search

Activity

  1. objectstack-fleet commented on Sep 30, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — documentation · priority:p2 · domain:devx · area:api · pm:queue. Direction: correct the two enumerations and keep both conclusions

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-09-30T07:34Z. ⛔ Not a claim, ⛔ not a dispatch.

    Triage: lands in content/docs/** ⇒ domain:devx by the lane table. It is the docs half of #20500. #20500 (domain:skills, p2) is closed with the skills half.

    Re-read on origin/main 96e724475c before grading. Both sentences are still there:

    • content/docs/protocol/objectql/query-syntax.mdx:1337 says "accepts only where / groupBy / aggregations";
    • content/docs/data-modeling/queries.mdx:672 says the route "forwards only where / groupBy / aggregations".

    ENGINE_AGGREGATE_OPTION_KEYS (packages/objectql/src/engine.ts:562) is context, where, groupBy, aggregations, having, timezone, search, searchFields.

    Why p2. It takes #20500's grade: one false enumeration, on two published surfaces. A reader who trusts "only" does not send search / having on an aggregate, and groups a searched page on the client. That is the wrong-number workaround #20358 retired. Wrong published docs are a product defect (NORTH-STAR rule 4).

    Direction.

    • Edit both sentences so they no longer enumerate a closed set they cannot keep true. The card's proposed wording is a lead, ⛔ not a specification:
      • query-syntax.mdx: the point that stays is "no orderBy / limit on this path";
      • queries.mdx: the point that stays is "REST does not forward timezone, so REST buckets on UTC".
    • ⛔ Do not paste the key list into the prose: a second hand-kept copy of ENGINE_AGGREGATE_OPTION_KEYS drifts the same way. If a list is wanted, point at the generated reference (content/docs/references/data/data-engine.mdx).
    • Re-run the card's census (content/docs/** for another enumeration of the set) at dispatch. A third hit rides this card.
    • skip-changeset: content/docs/** publishes nothing from a released package.
    • The stale code comment on ENGINE_DRIVER_PASSTHROUGH_KEYS stays out, as the card says.
  2. added
    area:apiThe API a customer can call, and integrations — REST, connectors, webhooks, jobs
    documentationImprovements or additions to documentation
    and removed on Sep 30, 2026
  3. objectstack-fleet commented on Sep 30, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 33
    Session: session_01VDtqoecgES7ScQYGbFVDRv
    Branch: claude/issue-20792-aggregate-option-docs
    Worktree: objectstack-issue-20792
    Domain: domain:devx
    Seat: domain:devx#1
    File surface:

    • content/docs/protocol/objectql/query-syntax.mdx: the sentence at :1337 on origin/main 96e724475c;
    • content/docs/data-modeling/queries.mdx: the sentence at :672;
    • any third enumeration the dispatch census finds in content/docs/** (it rides this card, per triage);
    • no changeset (content/docs/** publishes nothing).

    Stop on a breach and explain it in the report.
    Container & model: S (two sentence edits), mode:subagent, model: sonnet
    Clause-②: no
    Thread-read: 5906439697
    Serial constraints cleared: board read at 2026-09-30T07:51Z. 0 of the 10 open PRs touch either page.

    Priority rule 3 reading: a docs-correctness card (two false enumerations on published pages; NORTH-STAR rule 4), not a tooling or contract-hygiene card, so rule 3 does not hold it. Review face: content/docs/**, so a same-form contract-review record on the landing head is owed before enqueue.


    Generated by Claude Code

  4. objectstack-fleet commented on Sep 30, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 20792,
      "status": "done",
      "branch": "claude/issue-20792-aggregate-option-docs",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/20813",
      "session": "session_01VDtqoecgES7ScQYGbFVDRv",
      "premise_still_valid": true,
      "summary": "Both enumerations were false at origin/main 96e724475c and are replaced, each keeping its true point. query-syntax.mdx now says engine.aggregate() takes a closed option set with no orderBy/limit and links the generated Data Engine reference; queries.mdx now says the REST route does not forward timezone, so REST buckets on UTC. Census over hand-written content/docs found no third enumeration.",
      "tests": "docs-only. dispatch-gates --commands: 40 families, all exit 0 at ddcc241958 (lint, spec, client-react built first for gates that read dist); --ran reconciliation 40 derived / 40 run / 0 NOT-MEASURED / 0 UNRUN. Exit codes were captured per gate, but the --ran file itself carries no exit codes (tool notes this).",
      "mcp_calls": "1 - mcp__github__list_pull_requests (read, to resolve the PR number)",
      "api_writes": "2 - fleet-write dispatch pr_create (draft PR 20813), post-stamped comment on 20792",
      "open_questions": [],
      "out_of_scope_findings": ["carrier: none - noted, not filed: ENGINE_DRIVER_PASSTHROUGH_KEYS code comment is stale (ruled out of this PR by triage)"]
    }

    Reported at 2026-09-30T08:09Z.

  5. objectstack-fleet commented on Sep 30, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #20813 → 261c529f03, verified on origin/main by content at 2026-09-30T08:53Z.

    • content/docs/protocol/objectql/query-syntax.mdx:1337: "engine.aggregate() takes a closed option set with no orderBy or limit", pointing to the generated reference for the list.
    • content/docs/data-modeling/queries.mdx:672: "route does not forward timezone to the engine, so a query sent over REST always buckets on UTC".
    • content/docs/kernel/contracts/data-engine.mdx:470: the four-key EngineAggregateOptions literal is replaced by a pointer to /docs/references/data/data-engine#engineaggregateoptions; the AggregationNode block is kept.
    • git grep for "accepts only where" / "forwards only where" over content/docs on main now finds 0 hits.

    Contract review (review face content/docs/**), both records on PR #20813:

    • FAIL on ddcc241958: both sentences TRUE, but a third enumeration (kernel/contracts/data-engine.mdx:467-475) was missed by a prose-only census.
    • PASS on landing head 7837c5c823: all three edits TRUE against engine.ts / protocol.ts / rest-server.ts; the anchor resolves under fumadocs' github-slugger; the reviewer's own census over prose and type literals found no remaining enumeration.

    No changeset (content/docs/** publishes nothing). The stale ENGINE_DRIVER_PASSTHROUGH_KEYS code comment stays out, as the card ruled.

    pm:dispatched removed.

    Seat domain:devx#1 · session_01VDtqoecgES7ScQYGbFVDRv


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:apiThe API a customer can call, and integrations — REST, connectors, webhooks, jobsdocumentationImprovements or additions to documentationdomain:devxpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions