You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
| className | span / colSpan for width, FormSchema.fieldContainerClass for the grid.
(A field-level className is read on exactly one pseudo-field, type: 'section-divider',
where it styles the inline section header.) |
括注里的 exactly one 只在「渲染器显式解构并读取」这个意义上成立
(form.tsx:1637 的 const fp = fieldProps as any; … className={fp.className})。但同一个
渲染器把未解构的剩余键整包转发给解析出的组件:
An undeclared key still rides the props spread down to whichever component the field
resolves to, so a field-level className can visibly land on a built-in control — but
nothing in the contract promises that, and a registered widget honours it only if it
happens to spread its leftover props.
复核方式
sed -n '225,228p' packages/plugin-form/README.md
sed -n '1554,1572p;2029,2033p;302,320p' packages/components/src/renderers/form/form.tsx
Triage (first-touch, triage seat, session session_01HXzdkKx5WjwwCTT3c7U5kB): promoted finding → pm:queue, type Task. One-quantifier accuracy fix in packages/plugin-form/README.md:227: replace the "read on exactly one pseudo-field" claim with the measured truth — undeclared keys ride the props spread to the resolved control, nothing in the contract promises it — aligning with the docs-site wording PR #5130 already shipped. Small; good batch filler.
{
"issue": 5131,
"status": "done",
"branch": "claude/issue-5131-plugin-form-readme-quantifier",
"pr": "https://github.com/objectstack-ai/objectui/pull/5698",
"premise_still_valid": true,
"summary": "The card's premise was re-verified from the source, not taken on trust — and it had to be: the card measured at 0046d8f8c and every line number it cites has since moved, so the chain was re-derived at the branch base 6c6cee704. It holds. `className` is not one of the 16 names destructured off the field config in `renderFormField` (form.tsx:1848-1867), is not in `stripRendererOnlyProps` (form.tsx:348-388), rides `...fieldProps` into `renderFieldComponent` (form.tsx:2326-2327), survives the second destructure and the second strip there (form.tsx:3195-3196), and is spread onto the `Input` element (form.tsx:3251-3267), which appends it via `cn(baseClasses, className)` (packages/components/src/ui/input.tsx:14-20). So 'read on exactly one pseudo-field' is false as written, and the jsdom PROBE-CLASS measurement on the card is the same fact from the DOM end. Fixed exactly the one table cell at README.md:227: the reader-count claim is replaced by the contract statement the docs site already ships (#5130), while the row's advice and the section-divider read are kept, the latter now named as *explicit*. One markdown line changed, plus a `patch` changeset on @object-ui/plugin-form — README.md is in this package's npm `files`, following the precedent of .changeset/calendar-readme-schema-keys-5045.md, which is the closest sibling (a package-README correction that carried a version for exactly that reason). Note for the seat: on creation the PR body sanitizer silently DELETED all three angle-bracket JSX fragments (the `Input` element written in JSX form), backticks and all, leaving empty code spans mid-table; the body was read back, rewritten with prose names, and re-read to confirm — worth knowing before writing JSX into any PR body here.",
"tests": "No build and no test run, and the shared verify lock was not held — a declared narrowing, stated in the PR body as well. The diff is two markdown files (packages/plugin-form/README.md + .changeset/plugin-form-readme-classname-quantifier-5131.md), so it changes no byte a compiler, bundler or test reads; ci.yml and lint.yml both skip their expensive steps on such a diff through their own in-job 'Decide whether this change needs a full run' step, whose exclusion list carries '**/*.md' and '.changeset/**'. What judges this PR is therefore the unfiltered gate set, all four run locally on the FINAL commit 1066b1cdf, quoted from each gate's own verdict line rather than from an exit code: check-control-bytes 'OK (scanned 4754 tracked text file(s); skipped 85 binary).'; check-changeset-presence 'No source of a released package changed in this range, so no changeset is owed.' (it reports 2 files changed, 0 under any released package's src/, 1 changeset added); check-changeset-no-major 'No changeset declares a major bump.'; check-doc-links 'Links are valid across 13 scan roots.' Exit codes were captured as EXIT=$? immediately after a redirect to file, never after a pipe. Author-side control-byte scan over both touched files (grep -naP over the C0 range plus DEL) returned no match. CI check runs were not waited on, per dispatch; gate state at report time is in_progress — PR was 'unstable' (checks still running) when the body was last read.",
"open_questions": [],
"out_of_scope_findings": []
}
Two notes the JSON has no field for:
No other claim in the file was audited, and none is claimed to be correct. The scope fence was one quantifier; the surrounding prose (README.md:190-265) was read only as far as needed to place this cell in context, and nothing in what was read contradicted the source. That is an absence of observation, not a clean bill of health for the file.
Build Docs is not implicated. The diff touches neither content/docs/** nor apps/site/**, so that job's in-job path filter skips it and this PR does not inherit main's current docs failure.
Activity
os-support-ai commentedon Aug 19, 2026
Triage (first-touch, triage seat, session
session_01HXzdkKx5WjwwCTT3c7U5kB): promotedfinding→pm:queue, type Task. One-quantifier accuracy fix inpackages/plugin-form/README.md:227: replace the "read on exactly one pseudo-field" claim with the measured truth — undeclared keys ride the props spread to the resolved control, nothing in the contract promises it — aligning with the docs-site wording PR #5130 already shipped. Small; good batch filler.Size/model suggestion: S,
mode:subagent.Generated by Claude Code
os-sales commentedon Aug 22, 2026
Claim —
domain:uiexecution seat, round 16.session_012u2pRjcqAYtoEjgr3wwhnKclaude/issue-5131-plugin-form-readme-quantifierDispatching to an implementation agent now. Scope is the one-quantifier fix at
packages/plugin-form/README.md:227and nothing beyond it.Generated by Claude Code
docs(plugin-form): state the field-level className rule as contract, …
os-sales commentedon Aug 22, 2026
os-dev-report
{ "issue": 5131, "status": "done", "branch": "claude/issue-5131-plugin-form-readme-quantifier", "pr": "https://github.com/objectstack-ai/objectui/pull/5698", "premise_still_valid": true, "summary": "The card's premise was re-verified from the source, not taken on trust — and it had to be: the card measured at 0046d8f8c and every line number it cites has since moved, so the chain was re-derived at the branch base 6c6cee704. It holds. `className` is not one of the 16 names destructured off the field config in `renderFormField` (form.tsx:1848-1867), is not in `stripRendererOnlyProps` (form.tsx:348-388), rides `...fieldProps` into `renderFieldComponent` (form.tsx:2326-2327), survives the second destructure and the second strip there (form.tsx:3195-3196), and is spread onto the `Input` element (form.tsx:3251-3267), which appends it via `cn(baseClasses, className)` (packages/components/src/ui/input.tsx:14-20). So 'read on exactly one pseudo-field' is false as written, and the jsdom PROBE-CLASS measurement on the card is the same fact from the DOM end. Fixed exactly the one table cell at README.md:227: the reader-count claim is replaced by the contract statement the docs site already ships (#5130), while the row's advice and the section-divider read are kept, the latter now named as *explicit*. One markdown line changed, plus a `patch` changeset on @object-ui/plugin-form — README.md is in this package's npm `files`, following the precedent of .changeset/calendar-readme-schema-keys-5045.md, which is the closest sibling (a package-README correction that carried a version for exactly that reason). Note for the seat: on creation the PR body sanitizer silently DELETED all three angle-bracket JSX fragments (the `Input` element written in JSX form), backticks and all, leaving empty code spans mid-table; the body was read back, rewritten with prose names, and re-read to confirm — worth knowing before writing JSX into any PR body here.", "tests": "No build and no test run, and the shared verify lock was not held — a declared narrowing, stated in the PR body as well. The diff is two markdown files (packages/plugin-form/README.md + .changeset/plugin-form-readme-classname-quantifier-5131.md), so it changes no byte a compiler, bundler or test reads; ci.yml and lint.yml both skip their expensive steps on such a diff through their own in-job 'Decide whether this change needs a full run' step, whose exclusion list carries '**/*.md' and '.changeset/**'. What judges this PR is therefore the unfiltered gate set, all four run locally on the FINAL commit 1066b1cdf, quoted from each gate's own verdict line rather than from an exit code: check-control-bytes 'OK (scanned 4754 tracked text file(s); skipped 85 binary).'; check-changeset-presence 'No source of a released package changed in this range, so no changeset is owed.' (it reports 2 files changed, 0 under any released package's src/, 1 changeset added); check-changeset-no-major 'No changeset declares a major bump.'; check-doc-links 'Links are valid across 13 scan roots.' Exit codes were captured as EXIT=$? immediately after a redirect to file, never after a pipe. Author-side control-byte scan over both touched files (grep -naP over the C0 range plus DEL) returned no match. CI check runs were not waited on, per dispatch; gate state at report time is in_progress — PR was 'unstable' (checks still running) when the body was last read.", "open_questions": [], "out_of_scope_findings": [] }Two notes the JSON has no field for:
Build Docsis not implicated. The diff touches neithercontent/docs/**norapps/site/**, so that job's in-job path filter skips it and this PR does not inherit main's current docs failure.Generated by Claude Code
docs(plugin-form): state the field-level className rule as contract, …