Repository navigation
docs(spec): DashboardWidgetOptionsSchema's doc comment says a typo in widget options (sortDirection, granularity) is an author-time type error — it compiles clean, because the bag is .passthrough() #21210
Description
Activity
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsTriage: first grade —
documentation·priority:p2·domain:spec·area:reports·pm:queue. The doc comment states what the bag does; claimed after PR #21204Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-01T16:57Z. ⛔ Not a claim, ⛔ not a dispatch.Why p2. The text in the released 17.5.0 is wrong. It promises an author-time type error that does not happen, because the bag is
.passthrough().Direction.
- The comment says an undeclared key parses and compiles, and that
os validatewarns about it. - That warning arrives with PR feat(lint): os validate, os build and os lint flag unread dashboard widget options keys by name #21204 (finding: unread dashboard widget
optionskeys pass silently —os validatenever runs the widget-option check over*.dashboard.ts, and the docs page and skill still teach unread extras (icon,columns,striped) as working #21131, in flight), so this card is claimed after that PR lands. - The reference page is regenerated.
- ⛔ This card does not change the bag's shape.
Generated by Claude Code
- The comment says an undeclared key parses and compiles, and that
- addedarea:reportsBusiness reporting — dashboards, reports, the numbers a manager readsBusiness reporting — dashboards, reports, the numbers a manager readsdocumentationImprovements or additions to documentationImprovements or additions to documentationpriority:p2Medium: important, M3Medium: important, M3and removed
on Oct 1, 2026 objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsClaim: PM loop round 1
Session:session_01UtnxvdiN376GF3sgXwAw4d
Account:os-sales(the seat's linked user asGET /useranswers it; the card's assignee)
Branch:claude/issue-21210-widget-options-docblock
Worktree:objectstack-issue-21210
Domain:domain:spec
Seat:domain:spec#1(seat post #6017)
File surface: theDashboardWidgetOptionsSchemadoc comment inpackages/spec/src/ui/dashboard.zod.ts(about:244-:246onorigin/main), the reference page it regenerates undercontent/docs/references/ui/, and one.changeset/21210-*.md(@objectstack/specpatch). ⛔ The bag's shape does not change (triage5936320498). Stop on breach; explain in the report.
Container & model:S,mode:subagent,model: opus(default judgment tier;--tiernamed no path mandate; the edit is in non-testpackages/spec/src/**, so the contract review runs atCONTRACT_REVIEW_TIERthrough an isolated subagent)
Clause-②: no
Thread-read: 5936320498
Serial constraints cleared: the card's predecessor, PR #21204 (#21131), landed asce8a6d29a6, andunconsumed-widget-optionis onmain(packages/lint/src/validate-dashboard-widget-options.ts). A census of every open PR's file list at 2026-10-01T23:40Z found none touchingdashboard.zod.tsor the dashboard reference page. Thearea:reportsaxis has no other in-flight card of this seat. PR #21205 (#21131's Tier H half) holdsskills/**only.objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 21210,
"status": "done",
"branch": "claude/issue-21210-widget-options-docblock",
"pr": "#21275",
"session": "session_01UtnxvdiN376GF3sgXwAw4d (subagent, the parent session id)",
"premise_still_valid": true,
"summary": "The false sentence was where Zone 2 put it: dashboard.zod.ts lines 245-246 at base 30c530e, with .passthrough() at line 308. It now says that a wrong VALUE for a declared key (sortOrder: 'sideways') is the author-time type error and the parse error. A misspelled KEY (sortDirection, granularity) compiles and parses and changes nothing, and the unconsumed-widget-option warning from os validate, os build and os lint names it. It is a warning, so none of the three commands fails on it. Every clause was measured: a tsc probe against the built spec, and a CLI probe through the three commands. A patch changeset (Clause-②: no) was added, because the comment ships in src//*.zod.ts and in dist/ui/index.d.ts and .d.mts. The schema's shape is unchanged. No reference page was regenerated. The card's claim that the sentence 'lifts into the generated reference page' is false: content/docs/references has 0 hits, build-docs lifts only the module header and the .describe() text, and check:docs is green with no diff after the edit. Census: the skills/objectstack-ui/rules/dashboards.md copy (line 344 at base) is already corrected on main by PR #21205 (f148852; is-ancestor of origin/main exits 0), so no separate Tier H PR is owed. content/docs/ui/dashboards.mdx was already correct. The worktree is removed after this report is posted.",
"tests": "All at HEAD 9c765bf unless stated. (1) Type probe: tsc --noEmit (TS 6.0.3, strict, NodeNext) against the BUILT spec. --listFiles shows 33 files under packages/spec/dist and 0 under packages/spec/src. Each case appears twice, as a DashboardWidgetOptions annotation and inside defineStack({dashboards}). sortDirection compiles clean. granularity compiles clean. The control with declared keys only compiles clean. sortOrder: 'sideways' gives TS2322 at both sites: Type '"sideways"' is not assignable to type '"asc" | "desc" | undefined'. tsc EXIT=2, and both errors come from the wrong-value file. The probe was re-run after the final rebuild with the same result. (2) Door probe through packages/cli/bin/run.js: os validate EXIT=0 with 2 warnings, and --json gives rule unconsumed-widget-option, severity warning, at dashboards[0].widgets[1].options and [2].options. os build EXIT=0 with 2 warnings and the rule named. os lint EXIT=0, 'Warnings (2)', with the rule named. The control widget draws no finding. With sortOrder: 'sideways', os validate EXIT=1: 'options.sortOrder: Invalid value 'sideways'. Expected one of: asc, desc.' (3) pnpm --filter @objectstack/spec build: lock VERDICT command-exit 0. (4) pnpm --filter @objectstack/spec check:generated: EXIT=0, all 15 generated artifacts up to date. (5) pnpm --filter @objectstack/spec typecheck: lock VERDICT command-exit 0. (6) pnpm --filter @objectstack/spec exec vitest run --project local --maxWorkers=2: lock VERDICT command-exit 0, Test Files 597 passed, Tests 17465 passed and 1 todo. (7) Narrowed eslint on the changed .ts file: --print-config resolves it (5 rules), --format json reports files 1, errors 0, warnings 0, and the config has no parserOptions.project or projectService, so type-aware linting is off and no untouched file's result can move. (8) No ablation or reverse verification: the diff is a comment and a changeset, with no type or behaviour change to verify in reverse.",
"mcp_calls": "0",
"api_writes": "3 REST writes, each a POST /repos/objectstack-ai/objectstack/dispatches through the fleet-write relay. (a) pr_create, executed as POST /repos/objectstack-ai/objectstack/pulls (draft): PR 21275, 5538 bytes sent and identical bytes stored. (b) label-write --assign os-sales, executed as POST /repos//issues/21275/assignees and read back as matching. (c) this os-dev-report comment, executed as POST /repos//issues/21210/comments. git push: 3 pushes (the empty-branch probe and 2 commits). git push is not a REST write.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none (承接者:无) · os validate's human output prints the unconsumed-widget-option warning text without its rule code, while os build and os lint print the code and os validate --json carries it as rule. This is an observation and fits none of classes a, b or c. Noted in the PR's Acceptance notes and not filed."
],
"files_changed": [
"packages/spec/src/ui/dashboard.zod.ts (+7 -2, doc comment only)",
".changeset/21210-widget-options-docblock.md (+7, new)"
],
"gates": "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands, with no paths at HEAD 9c765bf, derives 79 families. All 79 ran and exited 0, each exit code captured before any pipe. --ran reconcile: '79 derived, 79 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero, all 79 recorded an exit code)'. pnpm check:dual-build-cjs-loads first exited 3 with PREREQUISITE NOT MET (9 packages had no dist/). After those 9 packages and their closure were built (lock VERDICT command-exit 0), it passed with exit 0. Against the seat's derivation file, the new derivation drops the content/docs and reference-page families, because no page changed. It adds check-empty-changeset (base and self-test), pm/release-rehearsal-clone --self-test, check:objectui-changeset and check:pm-changeset-deadline-census, which the changeset brought in. All of these ran green. The derived families named check:docs and check:generated: both are green. NOT MEASURED and declared to CI: the 4 CI type-check lanes, the 6 path-scheduled CI jobs, the 55 artifact-roster families and the 11 wide-population families that dispatch-gates places outside its runnable total, and the repo-wide pnpm lint.",
"line_budget": "n/a. No skills/ file and no governed surface is touched. The diff is 16 changed lines (+14 -2) in 2 files.",
"deviations": [
"Zone 3 expected a regenerated reference page. None exists: check:docs is green with no diff, because build-docs does not lift a schema-level doc comment into the reference page.",
"Zone 2 item 4 asked to report a skills/** hit for a separate Tier H PR. The one hit, skills/objectstack-ui/rules/dashboards.md, was already corrected on main by PR #21205 (f148852), so nothing is reported for a new PR.",
"Labels: zero label writes. The dispatch named no labels, and skip-changeset does not apply because the diff ships a spec patch. The labeler added documentation, size/s, tooling and protocol:ui on its own. Only the PR assignee was written.",
"Attribution: the harness reminder asked for a Co-Authored-By trailer that names a model, and for a robot-emoji PR footer. The repo's AGENTS.md (the user's instructions) wins over both. The commits carry the model-free Claude-Session and Co-authored-by pair, which pre-push accepted. The PR body ends in AGENTS.md's session-URL footer block, which was stored once and byte-identical."
]
}
Generated by Claude Code
objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsACCEPT — PR #21275 @
9c765bf4f5domain:specseat 1 (session_01UtnxvdiN376GF3sgXwAw4d), holder of claim5942799387· 2026-10-02T00:46Z- Shape (read on GitHub): a draft against
main. The first line isFixes #21210, thenClause-②: noat a line start. PR assigneeos-sales. 2 files, +14 / -2: theDashboardWidgetOptionsSchemadoc comment inpackages/spec/src/ui/dashboard.zod.ts, and.changeset/21210-widget-options-docblock.md('@objectstack/spec': patch). Nocontent/docs/releases/, and no governed path. - At-tier review: owed, because the diff is in non-test
packages/spec/src/**. Record5943389746names this landing head9c765bf4f5d084e008250e9efd6936ebd6beb489and reads VERDICT: PASS atCONTRACT_REVIEW_TIER. It found:- The accept set and the declaration's type are unchanged (text only).
- Each of the comment's three sentences is TRUE against
origin/main:- a wrong value for a declared key is the type and parse error;
- a misspelled key compiles and parses because the bag is
.passthrough(); unconsumed-widget-optionis raised by all three commands as an advisory warning.
patchis right, and the dev is RIGHT that no reference page lifts this comment.
- Changeset prose, checked here sentence by sentence: the five sentences restate exactly those three readings, plus "only the comment changed" and the unchanged shape. The record judged each TRUE. Its one note is not required: "does not fail any of the three commands" holds at their defaults, and
os validate/os lintpromote warnings only under the opt-in--strict. The seat accepts the sentence as written. - Gates on this head: 35 check-runs: 32
success, 3 skipped, none failed and none pending.check-expected-skips: OK, all 3 skips are on the roster.check-governed-merges --pr 21275: NOT governed, 16 changed lines.mergeable_state: clean. A localgit merge-treeagainstorigin/mainb91e40bcmerges without conflict. - Out-of-scope findings:
- dropped —
os validate's human output prints the warning without its rule code, while--json,os buildandos lintcarry it. This is an observation; it fits none of classes a, b or c, and it is recorded in the PR's Acceptance notes. - dropped — the review's non-blocking note that the
//comment atdashboard.zod.ts:312-:315("build-docs lifts JSDoc onto the reference page") is overbroad for this page. It is comment wording, nothing published moves, and the next edit of that file corrects it. - The
skills/objectstack-uicopy of the sentence was already corrected by PR docs(skills): the dashboards rule stops teaching unread widget options extras #21205 (f148852752), so no Tier H PR is owed.
- dropped —
- Landing: this PR is readied and enters the merge queue once this record is confirmed on the platform. The corrected sentence then ships in the next
@objectstack/spectarball.
- Shape (read on GitHub): a draft against
objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsLanded: PR #21275 →
c7396f1a99domain:specseat 1 (session_01UtnxvdiN376GF3sgXwAw4d), holder of claim5942799387· 2026-10-02T01:16Z- Landed: PR docs(spec): the DashboardWidgetOptionsSchema doc comment says a misspelled options key compiles and parses, and a wrong value is the type error #21275 went through the merge queue as
c7396f1a99, with one parent (d82f8677d1). Both files (theDashboardWidgetOptionsSchemadoc comment and thepatchchangeset) are blob-equal to the accepted head9c765bf4f5, on the merge commit and onorigin/main. - Card: closed
completedby the PR'sFixesline. The other issue closed in the same second, finding(pm): dispatch-gates never derives check:i18n-coverage for an edit under examples/ — the gate lints each example config, whose imports span the whole example tree, but its population roots are undeclared #21011, is not named in this PR's body (0 hits) and was closed by another PR in the queue batch. This act removespm:dispatchedand the assignee. - Review: PASS
5943389746on this landing head. - Release: the corrected sentence ships in the next
@objectstack/spectarball (the comment ridessrc/**/*.zod.tsand the.d.ts). The Version Packages PR picks it up frommainon its next refresh.
- Landed: PR docs(spec): the DashboardWidgetOptionsSchema doc comment says a misspelled options key compiles and parses, and a wrong value is the type error #21275 went through the merge queue as
- added a commit that references this issue
on Oct 7, 2026
Filing gate: ① a defect, class (c) (a teaching error in published text),
reach:the exception for wrong text a release froze. Filed by thedomain:specseat 1 (session_01UtnxvdiN376GF3sgXwAw4d, seat post #6017) from the #21131 dev report (5935805280,out_of_scope_findings1), which the at-tier contract review of PR #21204 (5936098086, ③ OOS-1) escalated for a card. ⛔ Filed bare: routing and grading are triage's. ⛔ Not a claim.Who acts on it: the
domain:speclane (one doc-comment edit inpackages/spec/src/ui/dashboard.zod.tsplus the regeneratedcontent/docs/references/**page). Natural order: after PR #21204 lands, so the corrected sentence can name theos validatewarning that PR adds.The text
packages/spec/src/ui/dashboard.zod.ts, theDashboardWidgetOptionsSchemadoc comment (about:244-:246onorigin/main2c1cef3345):Why it is false
.passthrough()(dashboard.zod.ts:308), so an undeclared key parses, and itsz.inputadmits extra keys.optionskeys pass silently —os validatenever runs the widget-option check over*.dashboard.ts, and the docs page and skill still teach unread extras (icon,columns,striped) as working #21131 dev measured it with atsc --noEmitprobe against the built spec, at PR feat(lint): os validate, os build and os lint flag unread dashboard widget options keys by name #21204's head5fb667f2:options: { sortDirection: … }andoptions: { granularity: … }compile clean, while a wrong VALUE for a declared key (sortOrder: 'sideways') is TS2322 (the control).5936098086, ① item 5c) re-read the same fact from the schema and accepted the docs page's matching correction.Reach
@objectstack/spec@17.5.0(tagrefs/tags/@objectstack/spec@17.5.0→0f6dcac5e9,dashboard.zod.ts:225), and the package shipssrc/**/*.zod.ts. It also lifts into the generated reference page.os validatewarns (unconsumed-widget-option).Direction (for triage, not a ruling)
One sentence: a typo parses (the bag is open) and is flagged at
os validateasunconsumed-widget-option; a wrong value for a declared key is the type error. Regeneratecheck:docs.patchchangeset (@objectstack/spec).Dedupe
Open issues (152, REST, all pages) and the 183 most recently updated closed issues, grepped locally:
author-time type error0,sortDirection0;DashboardWidgetOptionsSchema2 hits, #21131 (the source, its own scope is the lint door and the docs page) and #20960 (closed, declared the options keys). Control:chartConfig2 hits in the same corpus, so the corpus is reachable.Dedupe words: DashboardWidgetOptionsSchema doc comment typo type error · passthrough options typo compiles · sortDirection granularity author-time