Finding from the promo-video lane (steedos-labs/video-studio#5, "Studio modeling — clicked changes pass the same gate as code"). Filed as a finding only; not claiming it. Blocks promo video https://github.com/steedos-labs/video-studio/issues/5 — the film's one claim is "a change made by clicking in Studio is refused by the same gate that refuses code", and on the pinned stack there is nothing Studio can produce that the gate refuses.
Measured (hotcrm main @ 5e08628, @objectstack/* 17.2.0, console Studio; dev server, then snapshot-restored — zero residue)
- In a writable package (
New package (writable base)), click-create an object, then a Number field. The field starts as API name field_10 / label New field.
- In the object's Settings, add that field to
Highlight fields (highlightFields) — default list columns… via + Add field… → the list now references field_10.
- Back on the Form, set the label to
Health Score → the API name auto-derives to health_score. highlightFields still says field_10. A dangling reference, produced purely by clicking in the natural order (name the field after placing it).
- Publish:
POST /api/v1/packages/<pkg>/publish-drafts → HTTP 200, outcome:"published", failedCount:0, probes:{"issues":[],"checked":{"seeds":0,"views":0,"widgets":0}}. UI shows Published all drafts in this package (one atomic release).
- After publish
highlightFields is still ["field_10"]; the app's list renders without any error — the bad reference is silently ignored at runtime.
Why the gate stays quiet
list-view-field-unknown (error-level, in AUTHORING_RULES) checks view.columns. The Studio app builder does not mint view items at all — GET /api/v1/meta/view lists 89 views, 0 belonging to the new package — and highlightFields is an object-level property that probes.checked does not cover (views:0). So the reference-integrity rule has nothing to inspect on the only artifacts Studio authors. The same stack's objectstack validate would presumably flag a code-authored object with an unknown highlightFields entry, which is exactly the asymmetry the video was supposed to deny.
Minimal capability the film needs (no wish list)
Publishing a Studio draft whose highlightFields (or any field-name list on an object) names a field that does not exist on that object must fail the publish with a rule id and the offending path on screen — the same rule family that objectstack validate applies to code-authored objects. Warning-level is not enough for the claim; it has to refuse.
Also observed, for context (by design, not the ask)
Code-loaded package objects are read-only in Studio (object.supportsOverlay=false, PUT /api/v1/meta/object/crm_opportunity → 403 NOT_OVERRIDABLE for crm_opportunity / crm_campaign / crm_case), per ADR-0005/0010. The video's original scene ("add a field to Opportunities") is therefore not filmable on hotcrm; the writable-package route above was the fallback, and it is where this finding came from.
Related: objectstack-ai/objectui#2260 (Studio field API-name derivation) and the follow-up filed alongside this one in objectui.
Finding from the promo-video lane (steedos-labs/video-studio#5, "Studio modeling — clicked changes pass the same gate as code"). Filed as a finding only; not claiming it. Blocks promo video https://github.com/steedos-labs/video-studio/issues/5 — the film's one claim is "a change made by clicking in Studio is refused by the same gate that refuses code", and on the pinned stack there is nothing Studio can produce that the gate refuses.
Measured (hotcrm
main@5e08628,@objectstack/* 17.2.0, console Studio; dev server, then snapshot-restored — zero residue)New package (writable base)), click-create an object, then a Number field. The field starts as API namefield_10/ labelNew field.Highlight fields (highlightFields) — default list columns…via+ Add field…→ the list now referencesfield_10.Health Score→ the API name auto-derives tohealth_score.highlightFieldsstill saysfield_10. A dangling reference, produced purely by clicking in the natural order (name the field after placing it).POST /api/v1/packages/<pkg>/publish-drafts→ HTTP 200,outcome:"published",failedCount:0,probes:{"issues":[],"checked":{"seeds":0,"views":0,"widgets":0}}. UI showsPublished all drafts in this package (one atomic release).highlightFieldsis still["field_10"]; the app's list renders without any error — the bad reference is silently ignored at runtime.Why the gate stays quiet
list-view-field-unknown(error-level, inAUTHORING_RULES) checksview.columns. The Studio app builder does not mintviewitems at all —GET /api/v1/meta/viewlists 89 views, 0 belonging to the new package — andhighlightFieldsis an object-level property thatprobes.checkeddoes not cover (views:0). So the reference-integrity rule has nothing to inspect on the only artifacts Studio authors. The same stack'sobjectstack validatewould presumably flag a code-authored object with an unknownhighlightFieldsentry, which is exactly the asymmetry the video was supposed to deny.Minimal capability the film needs (no wish list)
Publishing a Studio draft whose
highlightFields(or any field-name list on an object) names a field that does not exist on that object must fail the publish with a rule id and the offending path on screen — the same rule family thatobjectstack validateapplies to code-authored objects. Warning-level is not enough for the claim; it has to refuse.Also observed, for context (by design, not the ask)
Code-loaded package objects are read-only in Studio (
object.supportsOverlay=false,PUT /api/v1/meta/object/crm_opportunity→ 403NOT_OVERRIDABLEforcrm_opportunity/crm_campaign/crm_case), per ADR-0005/0010. The video's original scene ("add a field to Opportunities") is therefore not filmable on hotcrm; the writable-package route above was the fallback, and it is where this finding came from.Related: objectstack-ai/objectui#2260 (Studio field API-name derivation) and the follow-up filed alongside this one in objectui.