Repository navigation
docs(skills): the page-builder guide authors object-grid and object-gantt in the properties bag (objectui#10859; objectui#11276 rider) - #11404
Conversation
… in the properties bag (objectui#10859) The "Grid plugin example" and "Gantt plugin example" os:check fences wrote their props flat on the node, a spelling `objectui validate` refuses by name since the object-gantt (objectui#10859 batch 6) and object-grid (objectui#11276) arms moved to the spec's `properties` bag. Both fences now write the bag; `bind` stays on the grid node, where BaseSchema declares it. The section lead no longer says plugin widgets read their configuration off the node: it names the three arms that take the bag and the one that still declares its keys on the node, and keeps the sentence that the `props` envelope is not read. The prose that taught the flat gantt keys "on the node" is retired for one sentence naming the refusal and its prescription. Measured on the built @object-ui/types dist at 6aa029b: the two fences were refused by both authoring faces; the rewritten fences and the other six os:check JSON fences in the file are accepted by both. Net -1 line under the skills/** zero-growth budget. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JG2jy8a9su7ia4Hx7zxv42
…ge-builder-bag-examples
|
changeset-claim-re-read
|
维护者速读(终稿)
改了什么。 只改对外发布的技能指南 为什么改。 这两个示例是 AI 写页面时直接照抄的范本,而它们教的写法现在会被 风险与代价(含回滚)。
席位意见。 建议批准。每句都有实测支撑,范围恰为一节,净行数在预算内(−1),契约复审档复核 PASS。上述 你要做的。 在本 PR 留一条 APPROVED review(
Generated by Claude Code |
Part of #10859
Clause-②: no
Part of #11276 — the declared rider: objectui#11276's release comment 5940114124 names this seat as carrier of the "Grid plugin example", so the two examples move in ONE governed PR and one approval covers both.
⛔ Governed surface (
skills/**): this PR stays a DRAFT until an authorized approver (os-zhuang/hotlong) leaves an APPROVED review; the claiming seat lands it after that.node scripts/check-governed-queue-guard.mjs --test skills/objectui/guides/page-builder.mdanswers GOVERNED (exit 3).What changes
One file,
skills/objectui/guides/page-builder.md, its "Plugin integration in page schemas" section:object-gridnode now writesobjectNameandcolumnsinsideproperties;bindstays on the node, where objectui'sBaseSchemadeclares it (the bag refuses it, measured below). PR objectui#11399 moved the arm and listed this governed producer without editing it.object-ganttnode now writesobjectNameand theganttblock insideproperties. PR objectui#11337 moved the arm; this is the governed item objectui#10859's release comment 5926748567 names.object-grid,object-form,object-gantt) in the wording the "Form plugin example" header used, saysobjectui validaterefuses the flat spelling by name, saysobject-kanbandeclares its keys on the node, and keeps the true half: thepropsenvelope is not read.startDateField/endDateFieldkeys "on the node" (the ObjectView / ListView flatten product) is retired. One sentence replaces it: the flat keys are refused by name and the refusal points atproperties.gantt.KEY. The sentence on the required trio and the README pointer stay.No other file. No changeset:
node scripts/check-changeset-presence.mjsanswers "No source or published contract of a released package changed in this range, so no changeset is owed" — the PR objectui#11397 precedent:skills/**sits outside every changesets-versioned package, so the repo rule asks for neither a bump nor an empty-frontmatter declaration;skip-changesethas no reader in this repo, so no label either.Line readings (
skills/**, governed; budget net 0, no growth)6aa029b63f)skills/objectui/guides/page-builder.md, whole fileskills/(27 files)SKILL.mdunderskills/, summedgit diff --numstatfor the one file: 23 added, 24 deleted. The two bag wrappers cost 4 lines; the retired gantt prose (6 lines out, 2 in) and the shortened form header paid for them. No token ratchet is defined forskills/**in this repo, so lines are the only reading.Measured (worktree at base
6aa029b63f, then at the head; Node v22.22.2 from /opt/nvm, since the container's v22.22.0 is refused by objectui's engine-strict install)Every
os:checkJSON fence in this file, through both authoring faces, read from the BUILT@object-ui/typesdist:safeValidateSchema(the functionobjectui validatecalls) andStrictAnyComponentSchema. The file has 8 such fences plus onetypescriptand onetsxfence the faces do not judge.type)card(section 3)action:buttonstatisticcard(expression boundaries)object-gridinvalid_typeatobjectNameand atcolumns("Did you meanobjectName→properties.objectName?"), plus the record-source rule atproperties.objectNameobject-formobject-kanbanobject-ganttinvalid_typeatobjectNameand atgantt("Did you meangantt→properties.gantt?"), plus the record-source rule at the rootCount: 2 of 8 refused at base, 0 of 8 at head.
Public door, end to end. The built
packages/cli/dist/cli.js validateon each fence as a standalone document: the base grid and gantt fences exit 1, "Schema validation failed", printing theDid you mean … → properties.…lines above; the head grid and gantt fences exit 0, "Schema is valid",Type: object-grid/Type: object-gantt.The rewrites' edges, each a probe document on the same two faces:
bindinside the grid's bag: REFUSE on both faces,unrecognized_keysatpropertiesnamingbind⇒bindstays on the node, as PR objectui#11399's producers keep it.ganttblock missingendDateField,startDateFieldortitleFieldis refused atproperties.gantt.KEYon both faces; the block with only the three is accepted ⇒ "Those threeganttkeys are the required ones; every other option … is optional" stays true.startDateField/endDateField/titleField): REFUSE on both faces, each "Did you meanKEY→properties.gantt.KEY?" ⇒ the replacement sentence says what the validator prints.object-kanbanin a bag (properties.objectName/properties.groupBy): the tolerant face accepts it (passthrough), the strict face refusesunrecognized_keysnamingproperties; the flat kanban node is accepted by both ⇒ the lead's "object-kanbandeclares its keys on the node" is the measured reading, and that example is untouched.{ "type": "timeline" }is accepted by both faces.The same sweep over every other
.mdunderskills/(report only, nothing edited): 16 files, 70os:checkJSON fences. The marker's contract for a JSON fence is "parses" (check-skill-examples.mjs), not "is a component document", and most refusals are fences whose root is not a node at all (notype:project-setup.md5,schema-expressions.md6,plugin-development.md1,rules/protocol.md1). Three fences with a registeredtypeare refused:guides/data-integration.mdandguides/schema-expressions.mdeach carry alistnode written withbindonly, refused atitems(invalid_type) by both faces, andguides/plugin-development.mdcarries atype: "module"fence (invalid_unionattype, a custom plugin type the guide registers in prose).rules/protocol.md'scardfence with apropsenvelope is refused by the strict face only, which is the trap that passage documents. Listed in the dev report for the seat; not this PR's.Gates (every exit code captured to a file before any pipe)
At
ccb4e7fb, the guide commit (skills/**is byte-identical at the headd83d2748, which only mergesorigin/main7728c67c):pnpm exec turbo run buildofcheck-skill-examples.mjs --build-filter's closure,--concurrency=2, under the shared verify lockTasks: 29 successful, 29 totalpnpm check:skill-examplesEvery marked skill example holds up against the built types.(JSON phase: 70 fence(s) parsed, 0 failed.)pnpm exec vitest runof the 12 ledgered test files that readskills/objectui/**(perscripts/markdown-test-inputs.mjs:skill-guide-provider-envelope,skill-guide-data-table-binding,skill-guide-permission-config,check-installed-spec-pin-claims,check-shell-escape-residue,check-skill-eval-tokens,check-skill-examples,check-skills-paths,doc-version-claims,dollar-dialect-alias-census,layered-read-declared-path-4016,markdown-test-inputs), under the lockTest Files 12 passed (12) · Tests 389 passed (389),VERDICT command-exit 0At the head
d83d2748:pnpm check:skills-pathsOK (89/90 stated path(s) resolve across 20 guide file(s); 1 baselined)pnpm check:skill-eval-tokensEvery must_contain token is taught by its own skill bundle.pnpm check:control-bytesOK (scanned 9926 tracked text file(s); skipped 85 binary); a self-scan of the file for control bytes: 0 hitspnpm check:shell-escape-residueOK (5/5 root(s) resolved …)node scripts/check-changeset-presence.mjsNo source or published contract of a released package changed in this range, so no changeset is owed.pnpm changeset:checkNo changeset declares a major bump.pnpm check:new-line-citations0 new citation(s), enforcement report-onlypnpm check:changeset-claims(report-only).changeset/6475-gantt-block-face-declared.md, whose census sentence says this guide'sganttblock carries the trio: still true (the block moved into the bag with all three keys), so no dated note is owednode scripts/check-governed-queue-guard.mjs --test skills/objectui/guides/page-builder.mdGOVERNED — 1 of 1 path(s), the expected answer: draft until approvalNot run, with the reason:
check:doc-snippets,check:doc-examples,check:doc-example-idsandcheck:doc-fencesscancontent/docsand the package READMEs (check-doc-snippet-types.mjs's header saysskills/objectui/**is not claimed by any gate there), so they cannot read this diff. Repo-widepnpm lintandpnpm testare CI's runs.维护者速读(草稿)
改了什么。 只改一份对外发布的技能指南
skills/objectui/guides/page-builder.md的「Plugin integration in page schemas」一节,净 −1 行。两个示例(object-grid的 Grid 示例、object-gantt的 Gantt 示例)从「属性平铺在节点上」改成写进 spec 规定的properties包;bind留在节点上。该节的导语不再说「插件组件像内建渲染器一样直接从节点上读配置」,改为点名三个走properties包的类型(object-grid/object-form/object-gantt)、说明objectui validate会按键名拒收平铺写法、object-kanban仍在节点上声明键,并保留「props信封不会被读」这句真话。Gantt 示例下面那段教「也可以把startDateField等键平铺在节点上」的文字删掉,换成一句:平铺键会被按名拒收,拒收信息会指向properties.gantt.KEY。为什么改。 这两个示例是 AI 写页面时的直接范本,而它们教的写法现在会被
objectui validate拒收(实测:基线上的两段 JSON 用构建后的 CLI 校验都是exit 1、「Schema validation failed」;改后两段都是exit 0、「Schema is valid」)。拒收来自已合并的 PR objectui#11337(object-gantt,objectui#10859 第 6 批)和 PR objectui#11399(object-grid,objectui#11276):按平台 spec 的PageComponentSchema,组件自己的属性只能住在properties包里,objectui 的校验面与os validate对齐。指南是受管面,所以那两张卡都把它列出而没有改,由本 PR 一次性承接,一次批准覆盖两个示例。文件里其余 6 个os:checkJSON 示例在基线上就通过校验,本次全部复测通过。风险与代价(含回滚)。 零代码、零发布包改动、无 changeset(门禁判定本次不欠)。风险只有措辞是否准确,每句都有上面的实测支撑(包括
bind放进包里会被拒、gantt 三个必填键、kanban 平铺仍被接受)。回滚 = revert 这一个 commit,指南回到旧写法——但旧写法会被校验器拒收,所以不建议回滚。本 PR 是受管面(skills/**),须人工批准后才能落地。席位意见。 (留空)
你要做的。 若认可措辞,在本 PR 留一条 APPROVED review;认领席随后转 ready 并走合并队列落地。
Acceptance notes
os:checkJSON fences in other governed guides are refused with a registeredtype(twolistnodes refused atitems, onemodulecustom type), listed under "Measured" above. Not this PR's file; the dev report carries them with dedupe words.bindon the node, which objectui'sBaseSchemadeclares and both objectui faces accept; the spec'sPageComponentSchemarefusesbind(recorded on objectui#10859 at the batch-6 ACCEPT as aBaseSchema-wide question). Unchanged here.origin/main7728c67c(objectui#11395,packages/layout) into the guide commit; the merge commit carries git's default message, and objectui forbids force-push, so it is not rewritten. The squash landing drops it.Session
session_01JG2jy8a9su7ia4Hx7zxv42, seatdomain:ui#2, accountos-sales.Generated by Claude Code