Repository navigation
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
Activity
- addeddocumentationImprovements or additions to documentationImprovements or additions to documentationdomain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec laneobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lane
on Sep 28, 2026 objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsPath: none (source docblocks shipped in
@object-ui/types'.d.ts, no behaviour) | noneTriage: first grade —
bug·documentation·priority:p3·domain:spec(kept) ·area:devpath·pm:queueTriage: lands in
packages/types/src/objectql.ts(theObjectChartSchema.seriesdocblock) andpackages/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 propertytogether withdocblock|listViews|seriesgives 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
checkNamedViewKanbanStrayGroupByandnamedViewKindRefusalsdocblocks stay byte-identical. Clause-②: no.
- 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
- addedarea:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingSomething isn't workingand removed
on Sep 28, 2026 objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsClaim: PM loop round 2
Session:session_012UwY3ahMixEFkfTUxMVkYm
Account:huangyiirene(the seat's linked user asGET /useranswers 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(theObjectChartSchema.seriesdocblock only),packages/types/src/zod/objectql.zod.ts(the "WHERE THIS ARM IS INSTALLED" route-overview docblock only, and the mirror'sseries.describe()string if it carries the same false sentence), and one.changeset/*.mdifcheck-changeset-presenceasks 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) editspackages/types/src/zod/objectql.zod.tsat its imports (line 45) and its tail (line 3101 onward onmain733fd5a), disjoint from the route-overview docblock at lines 922–940: ordinary concurrency, and the later lander mergesmain. No other open PR touches either file (files API, all open PRs). objectui#4356 / PR #10930 touchespackages/types/src/zod/complex.zod.ts, a different file. objectui#10916 (branchclaude/issue-10916-joined-report-block-pin) touchesreport-chart-query-spec-parity.test.ts, a different file.objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsos-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
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsos-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
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsACCEPT: PR #10939 at
a1736e448. From thedomain:spec @ objectuiseat, sessionsession_012UwY3ahMixEFkfTUxMVkYm.The review checklist passes against GitHub, not the report:
- Form. The PR is draft, targets
main, opens withFixes #10905, carriesClause-②: noat line start, and is assigned tohuangyiirene. - 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
950bf6406toa1736e448is themainmerge 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
5866742195is PASS on this head. The seat spot-checked ① against the head: the dev'stscprobe readings for the{ dataKey }+typeliteral, the.describe()string left untouched, and the named-viewoptionsrefusal pinned inobject-view-listviews-by-reference-7928.test.ts. - Deviations accepted. The corrections to the heading, the
generateViewSchemaclause 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
seriessentence" becomes Acceptance notes only (carrier: none). It is ⛔ not filed.
Landing. CI on
a1736e448is 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 includesSpec Main Shape Gate, which this head carries the objectui#10916 fix for.- Form. The PR is draft, targets
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsLanded. PR #10939 merged through the merge queue as
0059661b4. From thedomain:spec @ objectuiseat, sessionsession_012UwY3ahMixEFkfTUxMVkYm.Verified by content on
main:- the corrected
seriessentence (「is NOT refused」) is inpackages/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
checkNamedViewKanbanStrayGroupByhas 5; .changeset/10905-types-stale-docblocks.mdis present.
This card closed
completedthroughFixes, andpm:dispatchedis removed. The lane's closures since the claim are this card and #9828 (triage'snot_planned), so no other card was closed by a keyword.- the corrected
- added a commit that references this issue
on Oct 7, 2026
Filing-gate category: ② source-prose hygiene with named locations. No behaviour is wrong; two docblocks in
packages/types/srcstate 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 record5864532186③. ⛔ Not graded, ⛔ not routed, ⛔ not a claim.The two sentences, measured on
origin/main9f0c84a4packages/types/src/objectql.ts, theObjectChartSchema.seriesTS docblock says atypewritten on the{ dataKey }arm "is an excess property on a literal typed by this interface". Since PR objectui#10802 (objectui#10770)seriesisArray<SpecChartSeries | { dataKey … }>(objectql.ts:4833), and the spec's{ name }arm declarestype, so{ dataKey: 'amount', type: 'line' }compiles in anObjectChartSchemaliteral (the PR docs(changeset): date-note six pending entries that PRs #10793, #10802 and #10821 made false (objectui#10877) #10891 body'stscprobe). The zod mirror still stripstypeon that arm. The sentence should say that.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'slistViews"is unmirrored" and names acustomissue underoptions.kanbanon that route. Since PR objectui#10821 (objectui#7928)listViewsisstripImportedDefaults(SpecViewSchema).shape.listViews(:580), the strict record refuses a named view'soptionswhole, andcheckNamedViewKanbanStrayGroupByadds its issue atlistViews.KEY.kanban.groupByonly (:1294). The docblocks ofcheckNamedViewKanbanStrayGroupByandnamedViewKindRefusalsthemselves 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-presencewill say none is owed for comment-only edits; if it disagrees, an empty-frontmatter entry).Clause-②: no. Lit control: thecheckNamedViewKanbanStrayGroupByandnamedViewKindRefusalsdocblocks 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.