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.
finding(app-shell): Studio's "lock the API name on first save" has no real save signal — the draft auto-save is deliberately not counted, leaving one same-mount window open #7824
Reported by the #7615 dev seat as an out-of-scope residual, and filed by the PM seat so it survives that card's Fixes close. ⛔ Deliberately not closed inside objectui#7615 (PR objectui#7819): closing it is Clause-② work and that card is Clause-② no.
What objectui#7615 fixed, and the one gap it could not
ObjectFieldInspector used to decide "is this API name still auto-generated?" by pattern-matching entry.name against the placeholder shapes (field_N / TYPE / TYPE_N) — and its own first rename destroyed that shape, which is why typing Health Score one key at a time left the API name at h.
#7819 replaced that with a recorded owner ('label' while the derivation owns the name, 'author' the moment anyone types in the API name box), which is the posture CreateViewDialog's nameTouched and useCreateDerive's touched set already use.
⚠️ But the ruling's second boundary — lock it on first save — is still enforced by the placeholder-shape check, because that is the only save signal this inspector can see.
The residual, stated precisely
The record deliberately does not end at the 1.5 s draft auto-save (useDraftAutoSave) — and that choice is forced, not sloppy: if the auto-save counted as "saved", per-keystroke sync would be impossible by construction (the first auto-save would fire mid-typing and freeze the name).
⇒ The window that stays open is narrow and exactly one shape:
the same mounted inspector session in which the field was created, where a label edit after an auto-save still moves the API name.
Outside that window the behaviour is correct, and this is measured, not assumed:
state
behaviour
new field, author has not touched the API name
syncs on every label change ✅ (this is the fix)
author has typed in the API name box
locked ✅ — including when what they typed is shaped like a placeholder (a hand-typed field_9, which no string pattern-match can distinguish from nextFieldName() output)
a published or reloaded field
locked ✅ — fresh mount, no record, non-placeholder name
new field, same mount, after an auto-save
⬅ still syncs — this card
Why it needs a decision rather than a patch
Closing it requires the host to tell the inspector "this field is persisted" — a new prop on MetadataInspectorProps. That is a widening of a published props surface ⇒ Clause-② yes, and therefore not something the domain:ui dispatch lane takes on its own.
⚠️ It is also not obviously worth the prop. The residual only bites an author who, inside one uninterrupted inspector session, lets the draft auto-save fire and then keeps editing the label — and in that case the name following the label is arguably still the behaviour they want. ⇒ The real question is whether the window is a defect at all, and that is a ruling, not an implementation.
Related: objectui#7615 (the fix and the three pinned boundaries) · PR objectui#7819 · objectui#2260 (the original "API name follows the label until first save" ruling)
The residual window is narrow and costs nothing downstream: in the same mounted inspector session that created the field, a label edit after the 1.5 s draft auto-save still moves the API name. The field is not yet published at that point, so nothing references the name. Closing the window needs a new host-to-inspector "saved" signal, a published signature change, and no author has reported the behaviour. Zero measured pull ⇒ not a card. Reopening is free.
Activity
objectstack-fleet commentedon Sep 24, 2026
Closed
not_planned— UI closure batch 4 item 1 · maintainer 「同意」 (chat, director seat summon #29,session_01EcrTi7s5oDYPHS4Pi7h31d) 2026-09-24T07:35ZThe residual window is narrow and costs nothing downstream: in the same mounted inspector session that created the field, a label edit after the 1.5 s draft auto-save still moves the API name. The field is not yet published at that point, so nothing references the name. Closing the window needs a new host-to-inspector "saved" signal, a published signature change, and no author has reported the behaviour. Zero measured pull ⇒ not a card. Reopening is free.
Generated by Claude Code