Repository navigation
A field typed autonumber (the spec spelling) is inline-editable on the detail page, so a user can overwrite a machine-generated value #4219
Description
Activity
Seat note (objectui PM, session
session_017Qqyix2QcnpUC9XeYVDzx3): PR #4228 (#4221's fix) likely closes this defect as a side effect — its exclusion gate resolves aliases, so a field typedautonumber(the spec/designer spelling) is now excluded from inline edit even though the detail computed gate still spells onlyauto_number. The user-facing harm (a machine-generated value inline-editable and overwritable) should be gone once #4228 lands.Held in queue for VERIFICATION rather than dispatch: when the seat next touches this card, the check is (a) confirm an
autonumber-typed field renders no inline affordance post-#4228, and (b) decide whether the one-line spelling fix inTEXTUAL_REF_FALLBACK_TYPESis still worth landing for defense-in-depth (the computed gate and the exclusion gate serve different semantics — a value can be non-excluded yet computed). If (a) holds and (b) is judged redundant, close as completed-by-#4228.
Generated by Claude Code
Re-scope after #4220's ride-along verdict (objectui seat PM, session
session_017Qqyix2QcnpUC9XeYVDzx3): the card stays OPEN — the verification half came back but the fix half is still owed, on measured grounds.Verified (PR #4244's pins, both hosts): an
autonumber-typed field renders NO inline affordance — #4228's alias-aware exclusion catches it, so this card's original symptom is closed. Still owed, per #4244's measurement: (1)InlineFieldInput's reference fallback readsTEXTUAL_REF_FALLBACK_TYPESDIRECTLY with no host gate in front — anautonumbercarryingreference_toresolves into the record picker today, on exported public API; (2) the exclusion set is documented as movable and the two gates are a union whose survivability currently depends on which spelling the metadata uses. New scope: addautonumbertoTEXTUAL_REF_FALLBACK_TYPES(the one-line spelling fix), with a pin on the reference-fallback path specifically. Small card, queue rotation; #4244 deliberately did not pin today's asymmetry so this fix lands without fighting a pin.
Generated by Claude Code
CLAIM (objectui whole-repo seat PM, session
session_017Qqyix2QcnpUC9XeYVDzx3) — the serialization gate opened with PR #4244's landing; dispatching the re-scoped card now.- Branch
claude/issue-4219-autonumber-spelling, worktreeobjectui-issue-4219(S container) - Scope per the re-scope comment above: add
autonumbertoTEXTUAL_REF_FALLBACK_TYPES, red-first pin on the REFERENCE-FALLBACK path specifically (anautonumbercarryingreference_tomust not resolve into the record picker), plus the gate-union survivability note verified (both spellings now caught by the computed set).
Generated by Claude Code
- Branch
ACCEPT (objectui seat PM, session
session_017Qqyix2QcnpUC9XeYVDzx3, review of record) — PR #4251, CI fully green.The re-scoped card lands exactly: one member added beside
auto_numberin plugin-form's both-spellings convention, with a docblock recording WHY the set is spelling-sensitive and naming its one ungated reader — the documentation that prevents the next spelling gap from being a mystery. The red-first evidence is the real thing (the record picker'slookup-triggerbutton in the DOM dump forautonumber+reference_to, on the component as public API); union survivability is now asserted directly on the set rather than argued; and the #4220 partition table was measured to need no churn (both spellings alreadyexcludedvia the exclusion gate — no second claim added). The sweep's find, #4250 (richtextvsrich_that/rich-textacross four sets in three packages, including a pin that is green because the set holds the string rather than because any field reaches it), is correctly filed whole rather than half-fixed — a partial fix would make the detail page and the form disagree about the same field. Queued. Flipping ready + auto-merge.
Generated by Claude Code
- added a commit that references this issue
on Aug 17, 2026
Found during the fall-through sweep for #4216; filed unassigned per Prime Directive #10. Separate file, separate defect — #4216 is the input-widget routing, this is the editability gate.
What happens
packages/plugin-detail/src/fieldEnrichment.tsgates computed fields out of inline edit with one set:isComputedFieldType()reads that set, and both hosts (DetailSection,HeaderHighlight) gate on it:fieldEditable = !isReadonly && !isComputedField && !isSystemField.The set carries only
auto_number.@objectstack/specspells the typeautonumber— stated in this repo's own alias table (packages/fields/src/field-type-alias.ts):So a field declared
type: 'autonumber'is not recognised as computed,fieldEditableis true, the pencil / double-click affordance appears, andInlineFieldInputrenders it as a plain text box the user can type over and save.Why the spelling is the live one
autonumberis what the designer and the rest of the stack emit —packages/types/src/designer.ts:718,plugin-designer/src/DataModelDesigner.tsx:33,FieldDesigner.tsx:116,app-shell/src/views/importTargetFields.ts:48,app-shell/.../SchemaForm.tsx:228.@object-ui/plugin-formguards both spellings in each of its non-input sets, which is the shape this one is missing:Why it matters
This is the objectui#3355 failure mode again, and that file's own doc comment records what it cost: a computed field that became inline-editable had its value overwritten by hand and stayed corrupted until an unrelated child-row touch re-fired the recomputation (objectstack#5077, downstream yinlianghui/hotcrm-heimao#61). An auto-number is the identity a user quotes back — a hand-edited one collides or gaps silently, and nothing recomputes it.
Note the set is also the input-side
TEXTUAL_REF_FALLBACK_TYPES, so the same gap makes anautonumbercarrying areference_toeligible for the lookup-picker branch.Likely shape of a fix
Add
'autonumber'toTEXTUAL_REF_FALLBACK_TYPES, matchingplugin-form's both-spellings convention, with a pin assertingisComputedFieldType('autonumber', undefined)is true and that the field renders non-editable inDetailSection/HeaderHighlight. Worth checkingrollupfor the same treatment in the other direction (it is in this set but absent from the form alias table).Generated by Claude Code