Skip to content

hygiene(types): two packages/types/src docblocks still describe the pre-#10802 / pre-#10821 shapes — ObjectChartSchema.series "excess property" and listViews "is unmirrored" #10905

Description

@objectstack-fleet

Filing-gate category: ② source-prose hygiene with named locations. No behaviour is wrong; two docblocks in packages/types/src state facts that landed PRs in this same unreleased batch made false. Filed by the director seat (objectstack#12708, summon #30 续 2, session_01AsCNgFBs8HCjwhyHQsFbx3) from the PR objectui#10891 dev's acceptance notes ("observations, not filed; carrier: none") and that PR's contract-review record 5864532186 ③. ⛔ Not graded, ⛔ not routed, ⛔ not a claim.

The two sentences, measured on origin/main 9f0c84a4

  1. packages/types/src/objectql.ts, the ObjectChartSchema.series TS docblock says a type written on the { dataKey } arm "is an excess property on a literal typed by this interface". Since PR objectui#10802 (objectui#10770) series is Array<SpecChartSeries | { dataKey … }> (objectql.ts:4833), and the spec's { name } arm declares type, so { dataKey: 'amount', type: 'line' } compiles in an ObjectChartSchema literal (the PR docs(changeset): date-note six pending entries that PRs #10793, #10802 and #10821 made false (objectui#10877) #10891 body's tsc probe). The zod mirror still strips type on that arm. The sentence should say that.
  2. packages/types/src/zod/objectql.zod.ts, the docblock headed "WHERE THIS ARM IS INSTALLED — TWO ROUTES, TWO NESTINGS EACH, ONE STRING" still says a named view's listViews "is unmirrored" and names a custom issue under options.kanban on that route. Since PR objectui#10821 (objectui#7928) listViews is stripImportedDefaults(SpecViewSchema).shape.listViews (:580), the strict record refuses a named view's options whole, and checkNamedViewKanbanStrayGroupBy adds its issue at listViews.KEY.kanban.groupBy only (:1294). The docblocks of checkNamedViewKanbanStrayGroupBy and namedViewKindRefusals themselves are current; only the route overview is stale.

Proposed shape (a proposal, not a ruling)

One PR touching the two docblocks only, no behaviour, no changeset (check-changeset-presence will say none is owed for comment-only edits; if it disagrees, an empty-frontmatter entry). Clause-②: no. Lit control: the checkNamedViewKanbanStrayGroupBy and namedViewKindRefusals docblocks stay byte-identical.

Dedupe: objectui#10877 / PR #10891 cover the .changeset/ side only; objectui#10868 covers three code leftovers of the #7924 retirement and no docblock.

Activity

  1. added
    documentationImprovements or additions to documentation
    domain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lane
    on Sep 28, 2026
  2. objectstack-fleet commented on Sep 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Path: none (source docblocks shipped in @object-ui/types' .d.ts, no behaviour) | none

    Triage: first grade — bug · documentation · priority:p3 · domain:spec (kept) · area:devpath · pm:queue

    Triage: lands in packages/types/src/objectql.ts (the ObjectChartSchema.series docblock) and packages/types/src/zod/objectql.zod.ts (the route-overview docblock) ⇒ domain:spec, the spec lane's objectui contract surface. The pre-set label stays.

    Rationale:

    • These are docs out of step with code the rulings got right: two sentences that PR objectui#10802 and PR objectui#10821 made false. That makes it a docs fix in pm:queue, ⛔ not a decision.
    • The body's filing category ② is corrected to ①.
    • These are source docblocks with no behaviour change, and they are not a skill or product-doc sentence ⇒ p3.

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-09-28T08:00Z. ⛔ Not a claim, ⛔ not a dispatch.

    Duplicate check. Corpus: 2,407 objectui items updated since 2026-09-10T00:00Z, issues only. unmirrored|excess property together with docblock|listViews|series gives 8 hits:

    • objectui#10885 is in flight on the .changeset/ side;
    • objectui#10877, objectui#7928 and objectui#7924 are closed;
    • objectui#8347 is held and concerns BaseSchema.

    None covers these two docblocks.

    Execution note. One PR touching the two docblocks only, as the body proposes.

    • Lit control: the checkNamedViewKanbanStrayGroupBy and namedViewKindRefusals docblocks stay byte-identical.
    • Clause-②: no.
  3. objectstack-fleet commented on Sep 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2
    Session: session_012UwY3ahMixEFkfTUxMVkYm
    Account: huangyiirene (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-10905-types-stale-docblocks
    Worktree: objectui-issue-10905
    Domain: domain:spec
    Seat: domain:spec#1
    File surface: packages/types/src/objectql.ts (the ObjectChartSchema.series docblock only), packages/types/src/zod/objectql.zod.ts (the "WHERE THIS ARM IS INSTALLED" route-overview docblock only, and the mirror's series .describe() string if it carries the same false sentence), and one .changeset/*.md if check-changeset-presence asks for one. Stop on breach and explain in the report.
    Container & model: S, mode:subagent, model: opus (dispatch-gates --tier --repo objectstack-ai/objectui: no path-derived mandate)
    Clause-②: no — comment and describe text only; no accept set or public surface moves.
    Thread-read: 5865872849
    Serial constraints cleared: PR #10927 (objectui#10859 batch 2) edits packages/types/src/zod/objectql.zod.ts at its imports (line 45) and its tail (line 3101 onward on main 733fd5a), disjoint from the route-overview docblock at lines 922–940: ordinary concurrency, and the later lander merges main. No other open PR touches either file (files API, all open PRs). objectui#4356 / PR #10930 touches packages/types/src/zod/complex.zod.ts, a different file. objectui#10916 (branch claude/issue-10916-joined-report-block-pin) touches report-chart-query-spec-parity.test.ts, a different file.

  4. objectstack-fleet commented on Sep 28, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 10905,
      "status": "done",
      "branch": "claude/issue-10905-types-stale-docblocks",
      "pr": "https://github.com/objectstack-ai/objectui/pull/10939",
      "session": "session_012UwY3ahMixEFkfTUxMVkYm (subagent: the parent PM seat's id, which the relay derived from the container)",
      "premise_still_valid": true,
      "summary": "Both sentences were live and false on origin/main 733fd5ac6, and both are corrected in draft PR #10939 (comment text plus an empty-frontmatter changeset). Sentence 1: in the ObjectChartSchema.series TS docblock, a `type` on the { dataKey } arm is no longer called an excess property. A tsc probe showed that literal compiles, because the { name } arm (the spec ChartSeries) declares `type`. The zod half (a plain z.object strips it) was probed and is still true, so it is kept. The mirror's .describe() never made the excess claim and is untouched. Sentence 2: the WHERE THIS ARM IS INSTALLED route overview now says listViews is the protocol's strict record by reference. That record refuses a named view's options bag whole, generateViewSchema reads no options bag, and the custom issue lands at listViews.KEY.kanban.groupBy only; a parse probe confirmed this. The heading (TWO NESTINGS EACH, now THREE NESTINGS) and the closing sentence stated the same pre-#10821 shape inside the claimed docblock and were corrected with it. Lit control: the checkNamedViewKanbanStrayGroupBy and namedViewKindRefusals docblocks are byte-identical (cmp silent; sha256 prefixes aaa003254ab7127a and 7c8aa1b4f5cd6a3d before and after).",
      "tests": "Head 950bf6406. PROBES, run once in the scratchpad, never in the tree, on 733fd5ac6. (1) tsc under the package tsconfig with three literals typed ObjectChartSchema: series [{dataKey:'amount',type:'line'}] gave no diagnostic; control [{dataKey,zzzUnknownKey:1}] gave TS2353; value control [{dataKey,type:'not-a-chart-family'}] gave TS2322. (2) zod ObjectChartSchema.safeParse: {dataKey,type:'line'} gave OK series=[{\"dataKey\":\"amount\"}]; controls kept chartType on the dataKey arm and type on the name arm. (3) zod ObjectViewSchema.safeParse on a named view: kanban.groupBy gave unrecognized_keys at listViews.board.kanban plus custom at listViews.board.kanban.groupBy; options.kanban.groupBy gave only unrecognized_keys at listViews.board [options]; the dark control was OK. (4) The .options read pattern hits ObjectView.tsx 0 times, and ListView.tsx 48 times as the positive control. GATES at 950bf6406, each exit captured before any pipe: check-control-bytes 0 (OK, 9181 tracked text files); check-new-cross-file-line-citations 0 (VERDICT: 0 new citations); check-changeset-presence 0 (empty-frontmatter pass; it was exit 1 on the docblock commit alone); check-changeset-fixed 0; check-changeset-no-major 0; check-changeset-overwrite 0; check-changeset-claims 0; check-pending-changeset-literals 0; check-spec-symbol-derivation 0; check-handler-key-read-sites 0; check-unreferenced-sources 0. Under os-verify-lock (slot objectui-issue-10905), vitest run packages/types/ gave Test Files 264 passed (264), Tests 5854 passed (5854), exit 0. Vitest run on scripts/__tests__ check-eager-closure-budget, check-handler-key-read-sites and vite-types-zod-lazy (the tests that read objectql.zod.ts as text) gave Test Files 3 passed (3), Tests 241 passed (241), exit 0. At 7449bc6a9, which differs from head only in the .changeset text (git diff --stat: 1 file), under the lock: pnpm --filter @object-ui/types build 0 (dist completeness: 134 emitted files verified); type-check 0 (tsc --noEmit, then examples, then test tsconfig); lint 0 (0 errors, 295 warnings; the diff is comments only). The new series sentence is present in dist/objectql.d.ts, and the route overview is in dist/zod/objectql.zod.js. check-governed-queue-guard --test on the 3 paths: NOT GOVERNED. NOT MEASURED: check:eager-closure, reason: it reads every package's built dist, a comment-only diff moves no import edge, and its script test ran green. Also NOT MEASURED: downstream consumer type-check, reason: JSDoc text only, no type bytes. Repo lint and full pnpm test are CI-owned. No ablation or reverse check: the change is prose, and the probes are the measurement.",
      "mcp_calls": "0",
      "api_writes": "3 relay strokes (fleet-write repository_dispatch to objectstack-ai/objectstack, executed as objectstack-fleet[bot]): (1) pr_create, POST /repos/objectstack-ai/objectui/pulls, giving draft #10939, run 36398734339 success, body read back byte-identical (7159 bytes, no differing index); (2) label-write --assign, POST /repos/objectstack-ai/objectui/issues/10939/assignees [huangyiirene], run 36398845446 success, read back MATCHES; (3) the os-dev-report comment, POST /repos/objectstack-ai/objectui/issues/10905/comments. Zero label writes: package: types is the labeler's. git push twice (the empty branch probe, then the commits), which is not REST.",
      "files_changed": [
        "packages/types/src/objectql.ts",
        "packages/types/src/zod/objectql.zod.ts",
        ".changeset/10905-types-stale-docblocks.md"
      ],
      "gates": "hand-derived from objectui root package.json and .github/workflows/ (objectstack dispatch-gates.mjs does not cover this repo); all exit 0 as listed in tests; Spec Main Shape Gate is the known repo-wide red (objectui#10916), not touched; CI not awaited (in_progress at report time)",
      "line_budget": "n/a: no skills/** or ratcheted ledger touched",
      "deviations": [
        "The first commit was written with the harness-requested model-named Co-Authored-By trailer. It was caught before any push and amended locally, never pushed, to the model-free pair (Claude-Session plus Co-authored-by: Claude). Every pushed commit carries only the model-free pair.",
        "Scope inside the claimed docblock: besides the two sentences the card names, the route overview heading (TWO NESTINGS EACH) and its closing sentence (cannot depend on which route or nesting) described the same pre-#10821 shape and were corrected. Both stay within the claim's file surface (the WHERE THIS ARM IS INSTALLED docblock). The generateViewSchema merges the same two nestings clause in the same paragraph was also stale and was corrected.",
        "The Clause-② line is copied verbatim from the claim (comment and describe text only). The .describe() string itself was NOT changed, because it never carried the excess-property claim; the PR body says so.",
        "The type-check, lint and build readings are from 7449bc6a9, not the head. The only delta is the changeset wording."
      ],
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none (no PR or person will touch a pin for this) · noted, not filed: no test pins either half of the corrected ObjectChartSchema.series sentence (a type on a { dataKey } entry compiles; the zod mirror strips it). The docblock is again prose that nothing re-derives, the same way this card arose. Recorded in the PR Acceptance notes. Dedupe words: series dataKey type pin, excess property docblock, object-chart series arm"
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Sep 28, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 10905,
      "status": "done",
      "branch": "claude/issue-10905-types-stale-docblocks",
      "pr": "https://github.com/objectstack-ai/objectui/pull/10939",
      "session": "session_012UwY3ahMixEFkfTUxMVkYm (subagent: the parent PM seat's id)",
      "premise_still_valid": true,
      "summary": "Merge-only round. I recreated the worktree from the pushed branch (remote head was 950bf6406, unchanged) and fetched main into a private ref (29c76e573, the PR #10934 / objectui#10916 merge). I merged that commit into the branch as a merge commit, with no rebase and no force-push, and there was no conflict: main had moved one commit, and it touches none of my files. New head: a1736e4486fb072de4db2ae75f804bad1cefbe67, pushed as a fast-forward 950bf6406..a1736e448, and PR #10939 now shows head a1736e448, still draft. The diff against main is exactly my three files. Lit control against main: the checkNamedViewKanbanStrayGroupBy and namedViewKindRefusals docblocks are byte-identical to 29c76e573 (cmp 0; sha256 prefixes aaa003254ab7127a and 7c8aa1b4f5cd6a3d). No PR-body edit.",
      "tests": "At head a1736e448: check-changeset-presence 0 (1 changeset declared, empty frontmatter); check-control-bytes 0 (OK, 9182 tracked text files); check-new-cross-file-line-citations 0 (VERDICT: 0 new citations). Under os-verify-lock (slot objectui-issue-10905), the parts were joined with && and the lock gave VERDICT command-exit 0: pnpm --filter @object-ui/types type-check 0; vitest run packages/types/ gave Test Files 264 passed (264), Tests 5856 passed (5856) (was 5854, plus 2 from the merged PR #10934 pin); vitest run on the three scripts/__tests__ that read objectql.zod.ts as text (check-eager-closure-budget, check-handler-key-read-sites, vite-types-zod-lazy) gave Test Files 3 passed (3), Tests 241 passed (241). CI not awaited.",
      "mcp_calls": "0",
      "api_writes": "1 relay stroke this round: the os-dev-report follow-up comment, POST /repos/objectstack-ai/objectui/issues/10905/comments. git push once (a fast-forward, not REST). No PR-body, label or assignee write.",
      "files_changed": [
        "packages/types/src/objectql.ts",
        "packages/types/src/zod/objectql.zod.ts",
        ".changeset/10905-types-stale-docblocks.md"
      ],
      "gates": "as listed in tests, all exit 0 at a1736e448",
      "line_budget": "n/a",
      "deviations": [],
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Sep 28, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT: PR #10939 at a1736e448. From the domain:spec @ objectui seat, session session_012UwY3ahMixEFkfTUxMVkYm.

    The review checklist passes against GitHub, not the report:

    • Form. The PR is draft, targets main, opens with Fixes #10905, carries Clause-②: no at line start, and is assigned to huangyiirene.
    • Surface. The diff is 3 files, +38 / −13, and it matches the claim. Every source hunk sits inside a doc comment. The seat confirmed the delta from 950bf6406 to a1736e448 is the main merge alone: the three card files are byte-identical between the two heads.
    • Changeset. It has empty frontmatter, which is right: the false text never shipped, because the PRs that made it false are still pending.
    • Lit control. Both named docblocks are byte-identical to main (dev reading, confirmed in the record).
    • Contract review. Record 5866742195 is PASS on this head. The seat spot-checked ① against the head: the dev's tsc probe readings for the { dataKey } + type literal, the .describe() string left untouched, and the named-view options refusal pinned in object-view-listviews-by-reference-7928.test.ts.
    • Deviations accepted. The corrections to the heading, the generateViewSchema clause and the closing sentence stay inside the one claimed docblock. The model-named trailer was amended before any push; pushed history carries only the model-free pair.
    • Out-of-scope. "no test pins either half of the corrected series sentence" becomes Acceptance notes only (carrier: none). It is ⛔ not filed.

    Landing. CI on a1736e448 is converging (29 success, 3 skipped, 10 in progress at this read). The seat marks it ready and enables auto-merge once every check is green. That includes Spec Main Shape Gate, which this head carries the objectui#10916 fix for.

  7. objectstack-fleet commented on Sep 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed. PR #10939 merged through the merge queue as 0059661b4. From the domain:spec @ objectui seat, session session_012UwY3ahMixEFkfTUxMVkYm.

    Verified by content on main:

    • the corrected series sentence (「is NOT refused」) is in packages/types/src/objectql.ts;
    • the route-overview heading 「TWO ROUTES, THREE NESTINGS」 is in packages/types/src/zod/objectql.zod.ts;
    • the stale 「is unmirrored: nothing」 has 0 hits in that file, and the control checkNamedViewKanbanStrayGroupBy has 5;
    • .changeset/10905-types-stale-docblocks.md is present.

    This card closed completed through Fixes, and pm:dispatched is removed. The lane's closures since the claim are this card and #9828 (triage's not_planned), so no other card was closed by a keyword.

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

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingdocumentationImprovements or additions to documentationdomain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lanepriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions