Repository navigation
plugin-form draws { name } field entries and inline runtime-field section entries that objectstack's form view refuses; the page-builder guide teaches the field form and its extra keys are dropped #11550
Description
Activity
objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actionsTriage: first grade —
bug·priority:p2·domain:ui·area:records·pm:queue. Split ruling: retire the{ name }field entry; keep the inline runtime section entry, which this repo declaresTriage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-03T14:00Z. ⛔ Not a claim, ⛔ not a dispatch.Why p2. It has the grade of objectui#11522, #11533 and #11544, for the same two-door disagreement. The page-builder guide teaches three keys that the form silently drops.
Routing:
packages/plugin-form/src(ObjectForm.tsx,flatFields.ts) and the guide, sodomain:ui. This repo's declared type does not change, sopackages/typesis not touched.The writer measurement, read now. The card asks for this first.
objectstack-ai/hotcrmauthors noobject-formorobject-master-detail-formcomponent.- objectstack's
examples/app-showcaseauthors names only:new-project-wizard.page.tsuses stringsections[].fields, andproject-workspace.page.tsuses stringfields. - So the only off-spec writers are this repo's own guide, README and fixtures.
Ruling, per member (triage's, from the declared types; overturnable by the maintainer):
fields(object-form, and master-detail's hand-off): retire the{ name }entry, as the family ruled.- This repo already declares the member
string[](ObjectFormSchema.fields,packages/types/src/objectql.tsat the pin). The{ name }draw is undeclared tolerance. - The guide (
skills/objectui/guides/page-builder.md:263) and the fixtures are respelled to names. Alabelorrequiredoverride goes on a section entry or on the object field.typeis always the object field's. objectFormFieldsMembers-8071's "pinned as behaviour" case is turned around. A stored{ name }entry may stay readable, as objectui#11533 kept stored rules readable. ⛔ The authoring faces stop teaching it.
- This repo already declares the member
sectionsinline runtime entry ("shape 3"): not retired.- It is declared here, not tolerated:
ObjectFormSection.fields?: (string | FormField)[]at the pin. - It is documented:
plugin-form/README.md(about:750–:790) relies on it for a wizard with no data source. - It is the same runtime
FormFieldcontract ascustomFields. objectstack'sdomain:specseat re-stagedcustomFieldsto its S-objectui-held stage (5969669440), which means "the spec declares each contract first". Thesectionsmember, in both rows, follows the same path on objectstack's side. That staging is the seat's call on spec(ui): theComponentPropsMaprows still type renderer-read members asz.unknown()—navigationon object-map / object-gantt / object-tree andconditionalFormattingon object-kanban accept42— the family close-out after #21445 objectstack#21464. - ⛔ No narrowing that refuses the documented wizard.
- It is declared here, not tolerated:
Pins for this card's PR:
- A string
fieldsentry draws as before. - The guide's
os:checkexample parses with names only. - The section shape-3 pins (
submitTargetRefusal,sectionFields) stay green.
objectstack's side: objectstack-ai/objectstack#21464 types object-form and master-detail
fieldsas names once its.objectui-shacovers this landing. The seat's dev report notes thatFormViewSchema.sectionsaccepts the deprecatedvisibleOn. That rides thesectionsstaging there, not this card.
Generated by Claude Code
- addedarea:recordsBusiness objects, records, the views that show data, usable forms, searchBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatand removed
on Oct 3, 2026 objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actionsClaim: PM loop round 1
Session:session_01FjqrwXPfSMkSfkKYDSRkN2
Account:os-zhuang(the seat's linked user asGET /useranswers it; the card's assignee)
Branch:claude/issue-11550-form-fields-names-only
Worktree:objectui-issue-11550
Domain:domain:ui
Seat:domain:ui#1
File surface: triage ruling5969880008item 1 only (fields: retire the{ name }entry from the authoring faces); item 2 (section shape 3) is ⛔ not touched. Two PRs, because one path is governed:- PR A (code, merge queue):
packages/plugin-form/src/__tests__/objectFormFieldsMembers-8071.test.tsx: turn the "pinned as behaviour" case around;- the fixtures that author
{ name }field entries (fieldSecurityPayload.test.tsx,systemManagedPayload.test.tsx,topLevelFieldsWarnCoverage-8847.test.tsx), respelled to names; packages/plugin-form/README.mdonly where it teaches a{ name }object-formfield (⛔ not the shape-3 wizard section, about:750–:790);ObjectForm.tsx/flatFields.tsonly if measurement shows the read must change. The ruling lets a stored{ name }stay readable.- A changeset if published text or behaviour moves.
- PR B (governed
skills/**, draft until an authorized approval):skills/objectui/guides/page-builder.mdaround:263, theos:checkobject-formexample respelled to names only. Net line budget forskills/**: ≤ 0 (a respelling, not new prose). It carries the## 维护者速读(草稿)section, and it also owes an at-tier contract review (governed rule text). - Both PRs are
Part of #11550, and the seat closes the card when both are merged. The dev stops on any other breach and explains it in the report.
Container & model:M,mode:subagent,model: opus(the measured quota exemption.dispatch-gates --tier --repo objectstack-ai/objectuiprintedMANDATORYforskills/objectui/guides/page-builder.md('skills/**' — clause ①), and that tier answered HTTP 429 on this seat's reviewer at 2026-10-03T14:20Z (5970040600on objectui#9600). ⛔ Never lower than opus. The at-tier REVIEW is not exempt and runs when the tier answers. The exemption ends when the tier answers.)
Clause-②: no
Why no: the change narrows what the authoring faces teach. A stored{ name }entry stays readable, and no accept set widens or published surface is added. The governed half owes its at-tier review for being governed text, not for clause ②.
Thread-read: 5969880008
Serial constraints cleared: read 2026-10-03T14:30Z. - This seat's objectui#11536 (in flight) edits
plugin-form/src/index.tsxandapps/console's parity test, and may touchplugin-form/README.mdoutside:385–:392. If both cards edit the README, they stay in different sections, and the later lander mergesmain. - Open PRs: objectui#11512 (
os-tesla) editsplugin-form/src/MasterDetailForm.i18nLabels.test.tsx, not these files. objectui#11554 / feat(fields,app-shell,plugin-list): 「is empty」 / 「is not empty」 builders write the spec's one operator$empty; fields and app-shell floor at @objectstack/spec ^17.6.0 (objectui#10813) #11555 (the director's) touchplugin-grid,fields,plugin-listandapp-shell, not these. objectui#11556 (this seat) and objectui#11069 are disjoint. - This seat's objectui#11541 (in flight) is in
plugin-detail, disjoint. - objectui#11544 (same family,
plugin-grid) is disjoint by file.
Generated by Claude Code
- PR A (code, merge queue):
objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 11550,
"status": "done",
"branch": "claude/issue-11550-form-fields-names-only",
"branches": [
"claude/issue-11550-form-fields-names-only (PR A, code)",
"claude/issue-11550-guide-fields-names-only (PR B, governed skills guide)"
],
"pr": "#11560",
"prs": [
"https://github.com//pull/11560 (PR A, draft, NOT GOVERNED, head 12d4fb1)",
"https://github.com//pull/11561 (PR B, draft, GOVERNED, head 6ce28b7, carries the 维护者速读(草稿) section with 席位意见 blank)"
],
"session": "session_01FjqrwXPfSMkSfkKYDSRkN2",
"premise_still_valid": true,
"summary": "Ruling 5969880008 item 1 executed on the claimed surface; item 2 (section shape 3) untouched. PR A (objectui#11560, test-only, empty-frontmatter changeset): the fixtures that authored { name } object-form fields entries now name fields as strings (fieldSecurityPayload FIELDS, systemManagedPayload, and drawerFirstLoadWindow-10190's flat drawer shape, a fixture found by re-grepping main and outside the claim's parenthetical list but inside its class); objectFormFieldsMembers-8071 row 6 is turned around: it now pins that the ObjectFormSchema zod mirror refuses the entry (exactly one issue, invalid_type at fields.0), a bare name is the accepted control, and a STORED entry still draws; the master-detail hand-off row in topLevelFieldsWarnCoverage-8847 is relabelled as the same stored read (its purpose IS the tolerance, so it was relabelled, not respelled). The renderer read stays as stored-value tolerance, as the ruling allows: measured, the authored node's properties bag is the spec ComponentPropsMap row by reference and accepts { name } on safeValidateSchema and StrictAnyComponentSchema both before and after, so no stricter door is this repo's to own (objectstack-ai/objectstack#21464 types it upstream). PR B (objectui#11561, governed, draft): the page-builder guide's os:check object-form example reads fields: [name, email] and the note above it says labels/types/required come from the object fields and a per-form override goes on a sections[].fields entry; net -3 lines. The two PRs land independently, in either order. Two authoring faces outside the claimed surface still teach the entry and were NOT edited (see out_of_scope_findings): the registration descriptions in plugin-form index.tsx (held by objectui#11536) and the warnUnresolvedTopLevelField warning text in sectionFields.ts.",
"hypotheses": {
"1": "Confirmed and executed. Respelled to fields: [name, email]; label/required moved nowhere in the example, the note says where they go. Measured the os:check gate: check:skill-examples JSON.parses a json fence and does not validate it (its header: 'It is parsed, not validated'); the throwaway probe showed the old and the new example both accepted by safeValidateSchema and StrictAnyComponentSchema.",
"2": "Confirmed: read kept, said so in PR A's body, pin kept and turned around. Measurement did not show a stricter door this repo owns: the ObjectFormSchema zod mirror already refuses { name } at fields.0; the authored properties bag is the spec row by reference (unknown members), which objectui does not narrow.",
"3": "Confirmed with moves. fieldSecurityPayload's three card addresses are the three container mounts of one FIELDS constant (respelled once). systemManagedPayload respelled. topLevelFieldsWarnCoverage-8847's row is the tolerance pin, so it was relabelled as the stored read. Re-grep found one more writer, drawerFirstLoadWindow-10190 (flat drawer shape), respelled. No other object-form or master-detail top-level fields writer in packages, apps, examples, content/docs or skills (scan over every file naming a form node type or form component).",
"4": "Confirmed: plugin-form README's { name } entries are all plain form (FormSchema) fields or the shape-3 wizard section; every object-form fields example there already uses names. README not edited."
},
"tests": "PR A at 12d4fb1: (1) pnpm --workspace-concurrency=2 --filter '@object-ui/plugin-form^...' build to exit 0 (12 packages). (2) pnpm --filter @object-ui/plugin-form type-check (tsc --noEmit && tsc -p tsconfig.test.json) to exit 0; tsc -p tsconfig.test.json --listFilesOnly lists all 5 edited test files among 162 test files. (3) pnpm exec vitest run packages/plugin-form/ --maxWorkers=2 to 'Test Files 162 passed (162)', 'Tests 1859 passed | 1 skipped (1860)'. (4) The 5 edited files plus the shape-3 pins submitTargetRefusal.test.tsx and sectionFields.test.ts: 'Tests 104 passed (104)' at BASE c476be0 before the edit and after it. Ablation from the committed state, via objectstack scripts/ablation-replace.mjs inside a script with an EXIT/INT/TERM restore trap (git checkout HEAD -- absolute path, blob hash compared to HEAD, git diff HEAD empty); tests import ../ObjectForm and @object-ui/types/zod, which the root vitest config aliases to src, so no rebuild applied: leg A, ObjectForm.tsx '(fieldName as any).name' replaced by undefined, anchor 1 to 0, blob 2ae1112530f5 to 5e6d5e79185d, 8071+8847 gave 'Tests 2 failed | 13 passed (15)' (exactly the two stored-read rows), restored blob == HEAD; leg B, mirror 'fields: z.array(z.string())' widened to z.array(z.unknown()), anchor 1 to 0, blob 360b2e65b15e to 7aeed09ef049, 'Tests 1 failed | 14 passed (15)' (row 6 only: expected [] to deeply equal [ { code: 'invalid_type', ... } ]), restored. PR B at 6ce28b7: turbo build over check:skill-examples --build-filter (29 tasks, 25 cached) then pnpm check:skill-examples to exit 0, 'JSON phase: 70 fence(s) parsed, 0 failed.', --list shows the object-form fence '[json] marked pass'. ESLint narrowed to PR A's 5 files: 0 errors, 25 pre-existing no-explicit-any warnings; population = 5 files from --format json, each resolved by --print-config; invariance = eslint.config.js has no projectService/parserOptions.project and no eslint-rules/ rule reads the filesystem. Full pnpm lint, the 8-shard pnpm test, test:dist, coverage and e2e are CI's.",
"gates": [
{
"pr": "A",
"command": "pnpm check:control-bytes",
"exit": 0,
"verdict": "check-control-bytes: OK (scanned 10160 tracked text file(s); skipped 85 binary)"
},
{
"pr": "A",
"command": "pnpm check:new-line-citations",
"exit": 0,
"verdict": "VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only to exit 0"
},
{
"pr": "A",
"command": "node scripts/check-changeset-presence.mjs",
"exit": 0,
"verdict": "5 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s); every one has an EMPTY frontmatter"
},
{
"pr": "A",
"command": "pnpm check:changeset-claims",
"exit": 0,
"verdict": "No pending changeset names a file this change touches"
},
{
"pr": "A",
"command": "pnpm check:pending-changeset-literals",
"exit": 0,
"verdict": "No test source names a pending changeset"
},
{
"pr": "A",
"command": "node scripts/check-changeset-no-major.mjs",
"exit": 0,
"verdict": "No changeset declares a major bump"
},
{
"pr": "A",
"command": "node scripts/check-changeset-fixed.mjs",
"exit": 0,
"verdict": "All workspace packages are in the changeset fixed group"
},
{
"pr": "A",
"command": "pnpm check:test-path-roots",
"exit": 0,
"verdict": "check-test-path-roots: OK"
},
{
"pr": "A",
"command": "pnpm check:vi-mock-specifiers",
"exit": 0,
"verdict": "check-vi-mock-specifiers: OK"
},
{
"pr": "A",
"command": "node scripts/check-vi-mock-override-shape.mjs",
"exit": 0,
"verdict": "check-vi-mock-override-shape: OK"
},
{
"pr": "A",
"command": "pnpm check:shell-escape-residue",
"exit": 0,
"verdict": "check-shell-escape-residue: OK (5/5 root(s) resolved)"
},
{
"pr": "A",
"command": "node scripts/check-governed-queue-guard.mjs --test (6 paths)",
"exit": 0,
"verdict": "NOT GOVERNED, 6 path(s) checked against 5 governed surface(s); none matched"
},
{
"pr": "A",
"command": "pnpm --filter @object-ui/plugin-form type-check",
"exit": 0,
"verdict": "tsc --noEmit && tsc -p tsconfig.test.json, no output"
},
{
"pr": "A",
"command": "pnpm exec vitest run packages/plugin-form/ --maxWorkers=2",
"exit": 0,
"verdict": "Test Files 162 passed (162); Tests 1859 passed | 1 skipped (1860)"
},
{
"pr": "B",
"command": "pnpm check:skill-examples",
"exit": 0,
"verdict": "Every marked skill example holds up against the built types; JSON phase: 70 fence(s) parsed, 0 failed"
},
{
"pr": "B",
"command": "pnpm check:skills-paths",
"exit": 0,
"verdict": "check-skills-paths: OK (89/90 stated path(s) resolve across 20 guide file(s); 1 baselined)"
},
{
"pr": "B",
"command": "pnpm check:skill-eval-tokens",
"exit": 0,
"verdict": "Every must_contain token is taught by its own skill bundle"
},
{
"pr": "B",
"command": "pnpm check:control-bytes",
"exit": 0,
"verdict": "check-control-bytes: OK"
},
{
"pr": "B",
"command": "pnpm check:new-line-citations",
"exit": 0,
"verdict": "0 new citation(s)"
},
{
"pr": "B",
"command": "pnpm check:doc-fences",
"exit": 0,
"verdict": "every TypeScript block in 227 document(s) is fenced"
},
{
"pr": "B",
"command": "node scripts/check-changeset-presence.mjs",
"exit": 0,
"verdict": "No source or published contract of a released package changed in this range, so no changeset is owed"
},
{
"pr": "B",
"command": "pnpm check:changeset-claims",
"exit": 0,
"verdict": "names pending .changeset/6475-gantt-block-face-declared.md (mentions the guide); read: it is a census of the gantt blocks, untouched, still true"
},
{
"pr": "B",
"command": "pnpm check:shell-escape-residue",
"exit": 0,
"verdict": "check-shell-escape-residue: OK"
},
{
"pr": "B",
"command": "node scripts/check-governed-queue-guard.mjs --test skills/objectui/guides/page-builder.md",
"exit": 3,
"verdict": "GOVERNED, 1 of 1 path(s) on skills/** (expected)"
}
],
"files_changed": {
"A": [
"packages/plugin-form/src/tests/objectFormFieldsMembers-8071.test.tsx",
"packages/plugin-form/src/tests/topLevelFieldsWarnCoverage-8847.test.tsx",
"packages/plugin-form/src/tests/drawerFirstLoadWindow-10190.test.tsx",
"packages/plugin-form/src/fieldSecurityPayload.test.tsx",
"packages/plugin-form/src/systemManagedPayload.test.tsx",
".changeset/11550-object-form-fields-names-only.md"
],
"B": [
"skills/objectui/guides/page-builder.md"
]
},
"line_budget": "skills/** (PR B only): page-builder.md 352 to 349 (+6/-9, net -3); whole package (every tracked file under skills/objectui, which is all of skills/**) 5418 to 5415; all SKILL.md (1 file) 142 to 142. No re-wrap bought a line: the note stays 5 lines, the -3 is the two fields entries collapsing into one line. Token count not reported: no sister gate defines one for objectui.",
"deviations": [
"Write budget: used the dispatch prompt's widened budget (two draft pr_create, one PR-assignee label-write per PR, one report comment). The brief's shared identity block still says 'one draft pr_create, one label-write'; the prompt's widening was followed.",
"Claim file surface: drawerFirstLoadWindow-10190.test.tsx was added (a fixture authoring { name } object-form fields, found by the hypothesis-3 re-grep; inside the claimed class, not in its parenthetical list). The seat may want to note it on the claim.",
"Stopped at the claim boundary: plugin-form index.tsx (four registration descriptions) and sectionFields.ts (warning text) still teach the entry and were not edited; index.tsx is held by objectui#11536, and the claim says the dev stops on any other breach. Reported in out_of_scope_findings and open_questions.",
"PR B worktree /home/user/objectui-issue-11550-guide was cut from origin/main d0c0c7f (PR A's BASE is c476be0); both removed after the PRs opened.",
"check:skill-examples needed built dist: built with pnpm turbo run build --concurrency=2 over the gate's own --build-filter in PR B's worktree (not a --filter build of a touched package; PR B touches no package).",
"Attribution: commits end with the model-free pair (Claude-Session + Co-authored-by: Claude) per objectui AGENTS.md; the harness reminder's model-named Co-Authored-By trailer and its PR-footer form were not used (os-dev's session-URL footer was). Reported, not a change of history.",
"Throwaway probe packages/plugin-form/src/tests/zzProbe11550.test.ts was created in PR A's worktree, run, and deleted before any commit; never committed."
],
"mcp_calls": "0",
"api_writes": "5 REST writes, all through the fleet-write relay (each = one POST /repos/objectstack-ai/objectstack/dispatches executed as objectstack-fleet[bot]): pr_create POST /repos/objectstack-ai/objectui/pulls (PR A #11560, read-back 7440 bytes identical); pr_create POST /repos/objectstack-ai/objectui/pulls (PR B #11561, read-back 5501 bytes identical); label-write assignee POST /repos//issues/11560/assignees (os-zhuang, read back); label-write assignee POST /repos//issues/11561/assignees (os-zhuang, read back); post-stamped comment POST /repos//issues/11550/comments (this report). Plus git push of both branches (empty-branch probe, then one commit each).",
"open_questions": [
{
"question": "Who respells the two authoring faces outside this claim that still teach the { name } entry: the published registration descriptions of the fields input in plugin-form index.tsx (object-form, view:form, embeddable-form: '{ name }is tolerated'; object-master-detail-form: '({ name }tolerated)') and the warnUnresolvedTopLevelField console text in sectionFields.ts ('({ name }is tolerated)')?",
"options": [
"A: a patch round on this card (#11550 stays open as Part of) after objectui#11536 lands, with the claim's surface amended to index.tsx + sectionFields.ts; mechanical: drop each parenthetical, plus a patch changeset since src text ships",
"B: objectui#11536 carries the four index.tsx descriptions (it already edits that file), and a patch round here takes only sectionFields.ts",
"C: leave them; the declared member and the guide no longer teach it"
],
"recommendation": "A, because the change is one family (the ruling's 'authoring faces stop teaching it'), mechanical, and keeps objectui#11536's scope clean; waiting for #11536 avoids two in-flight claims on index.tsx. C leaves the registration, the face AI and the designer read first, teaching a spelling whose label/type/required the form silently drops."
}
],
"out_of_scope_findings": [
"class: c · reach: named producer: the published ComponentRegistry inputs[].description of the fields input on object-form, view:form, embeddable-form and object-master-detail-form (plugin-form src/index.tsx) says '{ name }is tolerated', which leads an author to write { name, label, required } entries whose label/type/required the form silently drops; the console text of warnUnresolvedTopLevelField (plugin-form src/sectionFields.ts) says the same to an author who wrote { field } · evidence: git grep -n 'is tolerated' over packages/plugin-form/src at c476be0 (5 hits outside tests: 4 in index.tsx, 1 in sectionFields.ts) · same family as this card: carrier: this card #11550 (patch round, see open_questions), not a new card · dedupe words: registration fields description name tolerated · warnUnresolvedTopLevelField tolerated · object-form fields input description",
"carrier: none needed · noted, not filed: FlatFieldsContext.fields in flatFields.ts documents the { name } read; it is not exported from the package entry and describes the read the ruling keeps, so it was left as it is."
],
"cleanup": "Both branches pushed, local == remote (A 12d4fb1, B 6ce28b7); both worktrees had node_modules removed and were removed with git worktree remove (no --force needed). Throwaway probe deleted before commit. No dev server, background job or monitor was started; all heavy runs went through os-verify-lock with OS_VERIFY_LOCK_SLOT=issue-11550-dev."
}
Generated by Claude Code
objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actionsSeat review of objectui#11550's two PRs (dev report
5970488708)domain:uiseat 1 ·session_01FjqrwXPfSMkSfkKYDSRkN2· 2026-10-03T15:19Z. Reviewed against GitHub, not the report.✅ ACCEPT: PR A objectui#11560 at head
12d4fb132(code, NOT governed)- Shape: draft, base
main. The first line isPart of #11550, with no closing keyword.Clause-②: nois at line start. - Content: 6 files, +35 / −24, all tests plus one empty-frontmatter changeset. That is objectui's declaration for a change that releases nothing, and the renderer is unchanged.
objectFormFieldsMembers-8071's row 6 is turned around. It pins that theObjectFormSchemamirror refuses a{ name }entry atfields.0(invalid_type), that a bare name is the control, and that a STORED entry still draws. That is the ruling's "may stay readable".topLevelFieldsWarnCoverage-8847's hand-off row is relabelled as that stored read; its purpose is the tolerance itself.- The
fieldSecurityPayload,systemManagedPayloadanddrawerFirstLoadWindow-10190fixtures are respelled to names.
- Claim
5970114033amended here:drawerFirstLoadWindow-10190.test.tsxjoins the surface. It writes a{ name }object-formfield and is in the claimed class, found by the dev's re-grep onmain. - Ablations: leg A (the stored read removed) turns exactly the two stored-read rows red; leg B (the mirror widened) turns row 6 red. Each was restored by blob hash.
- The changeset prose says "Test-only … no package is released and the renderer is unchanged". That matches the diff ✓.
- Lands through the merge queue when every check on its head is green.
PR B objectui#11561 at head
6ce28b777(GOVERNEDskills/**): seat read done; at-tier review owed; then the maintainer- Shape: draft,
Part of #11550, one file:skills/objectui/guides/page-builder.md, +6 / −9.- The
os:checkobject-formexample becomes"fields": ["name", "email"]. - The note above it now says that labels, types and
requiredcome from the object fields, and that a per-form override goes on asections[].fieldsentry.
- The
- Line budget: the claim set net ≤ 0. Measured: the file goes 352 → 349, the
skills/objectuipackage 5418 → 5415, andSKILL.mdstays 142 → 142. ✓ No re-wrap bought lines. - Gates (the dev's):
check:skill-examples70 fences parsed, 0 failed (the gate parses JSON and does not validate it);check:skills-pathsandcheck:skill-eval-tokensOK. - What it still needs:
- The skills hunk must be reviewed at
CONTRACT_REVIEW_TIER: this seat does not serve that tier, and objectui's skills seat (objectui#11311) is vacant. That tier answered HTTP 429 at 2026-10-03T14:20Z.needs:contract-reviewis hung on PR B. - After a PASS, the seat posts the final 维护者速读, hangs
needs-user-decisionon the PR and requests review from the two authorized approvers. ⛔ No ready flip, ⛔ no queue, before an authorized approval.
- The skills hunk must be reviewed at
The dev's open question (who respells the remaining authoring faces): A, decided here
- The four
fieldsinput descriptions inplugin-form/src/index.tsx(object-form,view:form,embeddable-form,object-master-detail-form) still say "{ name }is tolerated", and so doeswarnUnresolvedTopLevelField's text insectionFields.ts. - They are the ruling's own family ("⛔ The authoring faces stop teaching it"), and mechanical. So they ride a patch round on this card after PR objectui#11557 (objectui#11536, which edits
index.tsx) lands, with the claim surface amended to those two files and apatchchangeset, because that text ships. - This card stays open (both PRs say
Part of) until that patch round and both PRs have landed.
Out-of-scope
FlatFieldsContext.fields' docblock inflatFields.tsdescribes the read the ruling keeps, and it is not exported. Acceptance notes; ⛔ not filed.
Generated by Claude Code
- Shape: draft, base
objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actionsPR B objectui#11561 (governed
skills/**) is now with the maintainer ·domain:uiseat 1 ·session_01FjqrwXPfSMkSfkKYDSRkN2· 2026-10-03T15:47Z.- At-tier review PASS on head
6ce28b777: record5970686472. - The final 维护者速读 is posted on the PR (
5970718977).needs-user-decisionis hung on the PR (needs:contract-reviewremoved, since the record is adopted). Review is requested from both authorized approvers,os-zhuangandhotlong. - ⛔ It stays draft, outside the queue, until an authorized APPROVED review; then this seat flips it ready and lands it.
- Still open on this card:
- PR A objectui#11560 is in the merge queue.
- The patch round for the four
fieldsdescriptions inplugin-form/src/index.tsxand thewarnUnresolvedTopLevelFieldtext (decision A,5970513384) follows PR objectui#11557's landing.
Generated by Claude Code
- At-tier review PASS on head
objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actionsPR A objectui#11560 landed, verified by content; the card stays open (
Part of) ·domain:uiseat 1 ·session_01FjqrwXPfSMkSfkKYDSRkN2· 2026-10-03T15:48Z.- The merge: objectui#11560 went through the merge queue to
mainas806f327at 2026-10-03T15:44Z. - Content check against the first parent
b34cc14:objectFormFieldsMembers-8071.test.tsxnow pins the mirror'sinvalid_typerefusal (1 hit, 0 on the parent), and the empty changeset11550-object-form-fields-names-only.mdis in the tree (absent on the parent). Control:fieldSecurityPayload.test.tsxis present on both. - Left on this card, so
pm:dispatchedstays:- PR B objectui#11561 (governed, with the maintainer,
5970734288); - the decision-A patch round after objectui#11557 lands.
- PR B objectui#11561 (governed, with the maintainer,
Generated by Claude Code
- The merge: objectui#11560 went through the merge queue to
objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actionsClaim: PM loop round 1 (patch round, decision A of
5970513384)
Session:session_01FjqrwXPfSMkSfkKYDSRkN2
Account:os-zhuang(the seat's linked user asGET /useranswers it; the card's assignee)
Branch:claude/issue-11550-tolerated-descriptions
Worktree:objectui-issue-11550-patch
Domain:domain:ui
Seat:domain:ui#1
File surface: the authoring faces that still teach the{ name }entry, read at objectuiorigin/main072b7e8as leads:packages/plugin-form/src/index.tsx: thefieldsinput descriptions at about:232,:341and:403("{ name }is tolerated"), and the master-detail one at about:494("({ name }tolerated)");packages/plugin-form/src/sectionFields.ts: thewarnUnresolvedTopLevelFieldtext (about:212) and its docblock (about:190);- any test that pins that exact text;
- one
@object-ui/plugin-formpatchchangeset, because the text ships.
⛔ The renderer's stored-entry read stays (ruling
5969880008), and so do the section shape-3 entry andObjectFormSchema. The dev stops on a breach and explains it in the report.
Container & model:S,mode:subagent,model: opus(default judgment tier;dispatch-gates --tier --repo objectstack-ai/objectuiprinted "no path-derived mandate" forplugin-form/src/index.tsx)
Clause-②: no
Why no: description and warning text only; no accept set or published input moves.
Thread-read: 5970742116
Serial constraints cleared: read 2026-10-03T16:14Z.- PR objectui#11557 (objectui#11536,
index.tsx'sline_itemsregistration) merged as072b7e8; this branch cuts after it. - PR objectui#11561 (this card's governed guide) touches only
skills/**, which is disjoint. - This seat's in flight: objectui#11553 (Studio) is disjoint; PR objectui#11563 (
plugin-grid) is disjoint. - Open PRs of others: objectui#11512 edits
plugin-form/src/MasterDetailForm.i18nLabels.test.tsx, not these files.
Generated by Claude Code
objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 11550,
"status": "done",
"branch": "claude/issue-11550-tolerated-descriptions",
"pr": "#11566",
"session": "session_01FjqrwXPfSMkSfkKYDSRkN2 (mode:subagent of the PM seat session)",
"premise_still_valid": true,
"summary": "Patch round of objectui#11550 (seat decision A, 5970513384). The four top-levelfieldsinput descriptions in plugin-form/src/index.tsx (object-form, view:form, embeddable-form, object-master-detail-form) and the warnUnresolvedTopLevelField message in sectionFields.ts no longer say a{ name }member is tolerated; they still say 'bare field names' and the warning still names the right spelling (a bare field-name string, or a sections[].fields entry). The docblock above warnUnresolvedTopLevelField now says the top level takes only bare field-name strings and that a STORED{ name }entry still reads but is no authoring spelling. One @object-ui/plugin-form patch changeset. The stored read (ObjectForm.tsx fieldsToShow loop, flatFields.ts buildFlatFields), the section shape-3 entry and ObjectFormSchema are untouched. Draft PR objectui#11566, first line 'Part of #11550', 'Clause-②: no' at line start, head 701ada6. Premise measured on main 072b7e8: exactly the 6 claimed sites matched 'is tolerated' / 'tolerated)' in plugin-form/src; 0 after. Mechanism hypothesis 2 (a test pins the exact text) is FALSE: no test, snapshot, README or docs page quotes either sentence; the three warning pins assert substrings that are all kept, so no pin changed. The PR assignee was NOT set: the auto-mode classifier denied label-write (see deviations); the seat owes that write.",
"tests": "All at head 701ada6 (the only commit; no commit after these runs). (1)pnpm --workspace-concurrency=2 --filter '@object-ui/plugin-form^...' buildvia os-verify-lock: 'Scope: 12 of 47 workspace projects', 11 'build: Done', 'VERDICT command-exit 0'. (2) repo-rootpnpm exec vitest run --maxWorkers=2 packages/plugin-form/via the lock: 'Test Files 163 passed (163)', 'Tests 1889 passed | 1 skipped (1890)', VERDICT command-exit 0. (3)pnpm --filter @object-ui/plugin-form type-check: '> @object-ui/plugin-form@17.6.0 type-check' echoed, VERDICT command-exit 0. (4) lint, narrowed and proven:eslint .in packages/plugin-form (the package's own lint script, whichpnpm lint=turbo run lintruns) with --format json: 203 files, 0 errors, 1143 warnings; index.tsx 0/22 and sectionFields.ts 0/10, identical to their 072b7e8 copies linted via --stdin (0/22, 0/10). Population: eslint's own run over the package (no package config; root eslint.config.js). Invariance: root config extends tseslint.configs.recommended, zero hits for projectService/parserOptions.project, no custom rule uses parser services, so no type-aware linting and this diff cannot move an untouched file's verdict. Repo-wide pnpm lint left to CI. (5) shipped text:pnpm --filter @object-ui/plugin-form buildthengrep -rlF 'is tolerated' distexit 1 (0 files); new warning sentence found in dist/index.js and dist/index.umd.cjs (positive control); new description sentence count 3 in dist/index.js. No ablation or reverse verification: the change is text-only and adds or changes no pin.",
"gates": [
{
"command": "pnpm --filter '@object-ui/plugin-form^...' build",
"exit": 0,
"verdict": "os-verify-lock: VERDICT command-exit 0"
},
{
"command": "pnpm exec vitest run --maxWorkers=2 packages/plugin-form/",
"exit": 0,
"verdict": "Test Files 163 passed (163); Tests 1889 passed | 1 skipped (1890)"
},
{
"command": "pnpm --filter @object-ui/plugin-form type-check",
"exit": 0,
"verdict": "os-verify-lock: VERDICT command-exit 0"
},
{
"command": "eslint . (packages/plugin-form, --format json)",
"exit": 0,
"verdict": "203 files, 0 errors; edited files warnings equal to base"
},
{
"command": "pnpm check:control-bytes",
"exit": 0,
"verdict": "check-control-bytes: OK (scanned 10174 tracked text file(s); skipped 85 binary)"
},
{
"command": "pnpm check:new-line-citations",
"exit": 0,
"verdict": "VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0"
},
{
"command": "pnpm check:changeset-claims",
"exit": 0,
"verdict": "report-only: 3 pending changesets name sectionFields.ts; re-read, see out_of_scope_findings"
},
{
"command": "pnpm check:pending-changeset-literals",
"exit": 0,
"verdict": "No test source names a pending changeset."
},
{
"command": "node scripts/check-changeset-presence.mjs",
"exit": 0,
"verdict": "2 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s)"
},
{
"command": "node scripts/check-changeset-no-major.mjs",
"exit": 0,
"verdict": "No changeset declares amajorbump."
},
{
"command": "node scripts/check-changeset-overwrite.mjs",
"exit": 0,
"verdict": "No pre-existing changeset was modified or deleted."
},
{
"command": "node scripts/check-changeset-fixed.mjs",
"exit": 0,
"verdict": "All workspace packages are in the changeset fixed group."
},
{
"command": "pnpm check:element-data-source-declaration",
"exit": 0,
"verdict": "OK — 14 gate-consuming file(s) checked"
},
{
"command": "node scripts/check-governed-queue-guard.mjs --test (3 paths)",
"exit": 0,
"verdict": "NOT GOVERNED — 3 path(s) checked against 5 governed surface(s); none matched."
},
{
"command": "check:readme-exports",
"exit": null,
"verdict": "NOT RUN: no README moved"
}
],
"gate_families_rederived": "From objectui's own package.json and .github/workflows (41 files, ls-tree origin/main = worktree count 41): changeset-guard.yml (.changeset/: claims, no-major, overwrite), changeset-presence.yml, control-bytes.yml, line-citation-gate.yml, ci.yml (tests, type-check, check-changeset-fixed and registry-reading check:* such as element-data-source-declaration), lint.yml (pnpm lint, pnpm check = the CLI check), performance-budget.yml (packages/). Run locally: everything in gates above. Left to CI: repo-wide pnpm lint, pnpm test shards (console suites included; registry-inputs-spec-parity asserts only that each description is non-empty), e2e, performance budget, the CLI check.",
"files_changed": [
"packages/plugin-form/src/index.tsx (+4 -4)",
"packages/plugin-form/src/sectionFields.ts (+6 -4)",
".changeset/11550-fields-tolerated-teaching-dropped.md (new, @object-ui/plugin-form patch)"
],
"line_budget": "n/a (no skills/** touched)",
"deviations": [
"label-write NOT done:node scripts/pm/label-write.mjs --repo objectstack-ai/objectui --issue 11566 --assign os-zhuang(run from /home/user/objectstack) was denied by the Claude Code auto-mode classifier, reason '[External System Writes]'. Not retried, no other route tried. The seat owes the PR assignee os-zhuang on objectui#11566.",
"A read-only follow-up (git statusplusgit ls-remoteof the branch) was also denied by the classifier under the same reason. Not retried; localgit statuswas clean and the local tracking ref read 701ada6, the same head the relay read back on PR #11566.",
"PR body footer follows os-dev.md's session-URL form instead of the harness attribution lines; commit trailers are objectui AGENTS.md's model-free pair, not the harness's model-named Co-Authored-By."
],
"mcp_calls": "0",
"api_writes": "1 relay write so far: fleet-write dispatch fw-20261003T163811Z-bfaf3f (POST /repos/objectstack-ai/objectstack/dispatches, executed as POST /repos/objectstack-ai/objectui/pulls = draft PR #11566; read-back 5399 bytes sent, 5399 stored, identical). This os-dev-report comment through post-stamped.mjs is the second (POST /repos//issues/11550/comments). label-write: 0 (denied before it ran). Not REST: 2 git pushes of the branch (empty-branch probe, then 701ada6).",
"open_questions": [
{
"question": "Should the pending.changeset/8738-fields-warn-route1.mdlose its '({ name }tolerated)' before release? It publishes into the same CHANGELOG release as this patch and is the one remaining shipped text that calls{ name }tolerated. It is still true of the runtime read the ruling keeps.",
"options": [
"A: leave it. It is a true record of objectui#8738's route-1 change, it is not an authoring-time face (descriptions and the warning are), and this patch's own changeset in the same release states the bare-name spelling.",
"B: the seat amends the claim surface and a one-line follow-up drops or rewords the parenthetical. Cost: an edit to a changeset this change does not own, which check-changeset-overwrite reports (report-only), plus one more round."
],
"recommendation": "A. Real need: authors and AI meet the registration description and the console warning while authoring, and both are fixed here; a release note describing a past change is not an authoring face. Long-term: rewriting another change's release declaration so it agrees with a later ruling is the edit the overwrite gate exists to flag. AI error prevention: the same release carries this patch's note, which names the bare-name spelling and the sections[].fields route. Startup focus: no extra round for a sentence that is still true."
}
],
"out_of_scope_findings": [
"carrier: domain:ui seat 1 on objectui#11550 (this card stays open) ·.changeset/8738-fields-warn-route1.mdsays 'Top-levelfieldsreads only bare field-name strings ({ name }tolerated)', surfaced by check:changeset-claims as naming sectionFields.ts; same family as this card, so no separate card; see open_questions · noted, not filed · dedupe words: changeset 8738 tolerated, fields name entry, warn route1",
"carrier: none (承接者:无) · FlatFieldsContext.fields docblock in flatFields.ts says 'objects carrying one ({ name })': describes the kept read, not exported; already the seat's own Acceptance note in 5970513384 · noted in the PR's Acceptance notes, not filed",
"carrier: none (承接者:无) · the console ledger row 'object-form.fields' in apps/console/src/tests/registry-inputs-spec-parity.test.ts calls the{ name }spelling 'the read site's tolerance rather than a second contract': test prose about the pinned stored read, not an authoring face · noted in the PR's Acceptance notes, not filed"
],
"cleanup": "Worktree /home/user/objectui-issue-11550-patch: node_modules removed, thengit worktree removewithout --force (exit 0); local was clean and equal to the pushed head 701ada6. No dev server, background job or monitor started. All heavy runs went through os-verify-lock with OS_VERIFY_LOCK_SLOT=issue-11550-dev."
}
Generated by Claude Code
objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actions✅ ACCEPT: patch-round PR objectui#11566 at head
701ada618(dev report on this card); it lands through the merge queue when every check is greendomain:uiseat 1 ·session_01FjqrwXPfSMkSfkKYDSRkN2· 2026-10-03T16:42Z. Reviewed against GitHub, not the report.- Shape: draft, base
main. The first line isPart of #11550(⛔ no closing keyword, because PR B objectui#11561 is still open).Clause-②: nois at line start. 3 files, +29 / −8, no governed path. - The diff, read:
- The
fieldsdescriptions ofobject-form,form(view:form),embeddable-formandobject-master-detail-formdrop "{ name }is tolerated" / "({ name }tolerated)" and keep "Bare field names". warnUnresolvedTopLevelField's text drops the parenthetical and still names the right spelling.- Its docblock says a STORED
{ name }still reads but is no authoring spelling. - The stored read (
ObjectForm.tsx,flatFields.ts) is untouched, as the ruling requires.
- The
- Measured by the dev:
- the six sites matched before and 0 after;
- no test, snapshot or docs page pins either sentence, so hypothesis 2 is falsified and no pin moved;
- the built
disthas 0 "is tolerated", with the new warning sentence as the positive control.
- Changeset prose, checked against the diff:
patchfor@object-ui/plugin-form✓ · "no longer say that a{ name }object member is tolerated" ✓ · "Behaviour is unchanged … only the wording … is gone" ✓. - The dev's open question (does the pending
.changeset/8738-fields-warn-route1.mdlose its "({ name }tolerated)"?): A, leave it, decided here.- It is a true record of objectui#8738's change, and still true of the runtime read the ruling keeps.
- A release note is not an authoring face.
- Rewriting another change's declaration is what the overwrite gate exists to flag.
- This patch's own changeset, in the same release, names the bare-name spelling.
- Out-of-scope:
FlatFieldsContext.fields' docblock and the console ledger row's prose both describe the kept read. Acceptance notes, ⛔ not filed. - Deviation: the PR assignee is not set; the dev's write was refused in its own context. It is left to the maintainer, ⛔ not re-run by this seat.
- The card closes when PR B objectui#11561 (governed, with the maintainer) and this PR are both merged.
Generated by Claude Code
- Shape: draft, base
objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actionsPatch round landed and verified by content: PR objectui#11566 →
maindbd1081; this card stays open for PR objectui#11561 ·domain:uiseat 1 ·session_01FjqrwXPfSMkSfkKYDSRkN2· 2026-10-03T17:13Z.-
The merge: PR objectui#11566 (decision A,
5970513384) went through the merge queue tomainasdbd1081at 2026-10-03T17:12Z. -
Content check on
maindbd1081against its first parentf624f27:mainparent plugin-form/src/index.tsx: mentions oftolerat(the fourfieldsdescriptions)0 4 plugin-form/src/sectionFields.ts: mentions oftolerat(warnUnresolvedTopLevelFieldand its docblock)0 2 The changeset
11550-fields-tolerated-teaching-dropped.mdis in the tree. The diff is exactly 3 files, +29 / −8. -
PR objectui#11566 says
Part of #11550, so it closed nothing. No card closed in that window. -
What is left on this card: PR objectui#11561 (governed
skills/**, thepage-builder.mdexample). It is draft and waiting on an authorized APPROVED review fromos-zhuangorhotlong. On approval, this seat flips it ready and lands it, then closes this card by hand. Its parts are PR objectui#11560 (landed), this patch round (landed) and PR objectui#11561. -
pm:dispatchedand the assignee stay until then.
Generated by Claude Code
-
objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actionsLast part landed and verified by content; this card closes
completedby hand ·domain:uiseat 1 ·session_01FjqrwXPfSMkSfkKYDSRkN2· 2026-10-03T23:31Z.-
The approval: PR objectui#11561 (governed
skills/**) carries an authorized APPROVED review fromos-zhuang(review5403315882, on head6ce28b777). The maintainer then marked it ready, enabled auto-merge, mergedmaininto the branch (76c1678) and enqueued it. This seat did not approve or enqueue. It checked every check on76c1678(allsuccess, plus the three expected skips:Test (coverage), its shard matrix anddependabot), and removed the PR'sneeds-user-decisionlabel once the approval was on record. -
The merge: PR objectui#11561 went through the merge queue to
mainas0a53c67at 2026-10-03T23:30Z. -
Content check of
skills/objectui/guides/page-builder.mdonmain0a53c67against its first parent5cde2c6:mainparent the example's "fields": ["name", "email"]1 0 the old inline field object { "name": "email", "label": "Email", "type": "text" }0 1 the callout " object-formfieldsare names"1 0 the old "form fields key off name" sentence0 1 the per-form override on a sections[].fieldsentry1 0 The diff is exactly that one file, +6 / −9.
-
The pending-changeset re-read (the
changeset-claim-re-readcomment on the PR):.changeset/6475-gantt-block-face-declared.mdnames this guide for its census ofganttblocks. The diff touches only theobject-formexample and its callout, with noganttblock, so that census sentence stays true. No correction is owed. -
Every part of this card is on
main: PR objectui#11560, the patch round PR objectui#11566 (dbd1081) and PR objectui#11561 (0a53c67). Each saysPart of #11550, so this seat closes the card by hand. -
In that window objectui#11543 also closed, through its own PR objectui#11558 (
Fixes); it is not this seat's card, and nothing closed unexpectedly. -
pm:dispatchedis removed in the same act.domain:ui,area:records, the type and the priority stay.
Generated by Claude Code
-
- added a commit that references this issue
on Oct 3, 2026 - added 4 commits that reference this issue
on Oct 7, 2026
Filing gate: ① a defect, finding class: two doors over one contract disagree.
reach:a named producer, this repo's published page-builder guide (below). Filed from objectstack'sdomain:specseat 2 (session_01YDt3PzwfrkuFzUBF89WPmM, objectstack seat post #18549), from the stage-3 dev report of objectstack-ai/objectstack#21464 (PR objectstack-ai/objectstack#21590), measured at this repo's pin89cad75d55by objectstack's.objectui-sha. ⛔ Filed bare: routing and grading are this repo's triage's. ⛔ Not a claim.Measured (at
89cad75d55)object-formfieldspackages/plugin-form/src/ObjectForm.tsx:961-981(the field pool) andflatFields.ts:71-79(the drawer and modal arms). An entry is a string, or an object drawn by itsname.string[], yet draws{ name }entries. They are pinned as behaviour in__tests__/objectFormFieldsMembers-8071.test.tsx:165-167, and authored infieldSecurityPayload.test.tsx:214,:222,:230andsystemManagedPayload.test.tsx:209.skills/objectui/guides/page-builder.md:263, anos:checkexample, teachesfields: [{ name, label, type, required }, …]. The form draws each entry bynameand silently dropslabel,typeandrequired.object-formsectionssectionFields.ts:367-369("shape 3") draws an inline runtime field entry as it stands, reached fromObjectForm.tsx:364,:1518and every sectioned arm.FormViewSchema.sections) states every section key the form reads, but refuses that entry shape. Writers that draw it:plugin-form/README.md:764(a wizard with inline runtime fields), andsubmitTargetRefusal.test.tsx:345and:374.object-master-detail-formfieldsandsectionsMasterDetailForm.tsx:1692-1693hands both to its parent form verbatim, so they are the form's reads.__tests__/topLevelFieldsWarnCoverage-8847.test.tsx:254-257draws[{ name: 'note' }, 'status'].So: objectstack's #21464 cannot type these four
ComponentPropsMapmembers, either by reference to its form view or to this repo's declaredstring[], without refusing values this renderer draws. Its PR #21590 holds all four asheld-for-decisionin the enumeration pin, with these reads recorded. The other fourobject-formmembers ship typed:contentLayout,submitBehavior(by reference),navigateOnSuccessandmobile.The two directions (⛔ not a ruling)
fieldstakes names only, and section field entries take the spec's form (keyed byfield). The page-builder guide and the fixtures are respelled, and the droppedlabel/type/requiredeither move to the object field or become a declared override. objectstack can then type the four members by reference.{ name }field entry, an inline runtime field in a section). That widens its form view and needs its own ruling there.Either way, the authored-writer measurement comes first. objectstack's dev report on #21464 holds the per-file census: object-form
fieldshas 33 values, 8 refused againststring[], 5 of them drawn;sectionshas 252, 15 refused against the form view, 3 of them drawn.Dedupe: the 111 most recently updated issues here, open and closed, were listed by REST and grepped (title and body) for
flatFields,customFieldsMerge,sectionFields,page-builder,inline runtime field,FormViewSchema,object-form fieldsandobjectFormFieldsMembers. The only hit is #9771, a seat post, not this subject. Control:plugin-form, 5 hits. Dedupe words: object-form fields name entry drawn · sectionFields shape 3 inline runtime field · page-builder guide fields label type required dropped · master-detail form fields sections parent hand-off.Generated by Claude Code