diff --git a/skills/objectstack-automation/SKILL.md b/skills/objectstack-automation/SKILL.md index 8824aa3f97..7dd60c059c 100644 --- a/skills/objectstack-automation/SKILL.md +++ b/skills/objectstack-automation/SKILL.md @@ -233,8 +233,9 @@ run reports success. `objectstack validate` names the offending template. > **Writing a `readonly` field? Set `runAs: 'system'`.** `readonly: true` > governs the end-user surface: under the default `runAs: 'user'`, the engine -> **silently strips** a `readonly` field from an `update_record` payload -> — the step reports success but the value never lands. A flow that +> **strips** a `readonly` field from any non-system write — `create_record` and +> `update_record` alike — the step reports success but the value never lands, +> and the drop is named in the step's warnings. A flow that > maintains a `readonly` field (approval stamps, conversion flags, SLA > markers, rollups) must run `runAs: 'system'`, the trusted-writer channel. > `os validate` / `os build` fail a `runAs:'user'` `update_record` that writes diff --git a/skills/objectstack-data/SKILL.md b/skills/objectstack-data/SKILL.md index bfe1c3037c..23ba8b35a3 100644 --- a/skills/objectstack-data/SKILL.md +++ b/skills/objectstack-data/SKILL.md @@ -271,7 +271,7 @@ export const Invoice = ObjectSchema.create({ incoming changes when the predicate is `TRUE`. - **`readonly: true` governs the end-user surface, not trusted system writers.** A non-system write (REST/UI, and any `runAs:'user'` flow — the default) has - the field **silently stripped** from an UPDATE payload; the write reports + the field **stripped** from any non-system write; the write reports success but the value never lands. System-context writes — `runAs:'system'` flows, system hooks, seeds, imports, migrations — are exempt and DO write it. So the pattern "users can't edit this, but automation