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
A recurring, high-severity class surfaced by the online-authoring push and the publish-rebind consumer audit: a business user authors metadata in the Studio, publishes it, and it's stored + shown as live — but the runtime never actually WIRES it, so it silently does nothing (often not even after a restart). Code-reading and mocked unit tests pass; only a real-runtime probe reveals it (the #2560 lesson). This is the same silent-failure theme as the just-shipped #4 (inline validation) and #6 (enable/disable) work — "you authorized it, it quietly doesn't take effect."
This issue consolidates the remaining members of that family into one place, now that the first fix has landed and established the pattern.
Authored translations never reach the i18n runtime — Authored (Studio) translations never reach the i18n runtime — only static bundles are loaded #2591. loadTranslations is called only with static bundles (app bundle.translations, plugin translations/); nothing reads translation metadata items into service-i18n (getMetaItems({type:'translation'}) → 0). translation is allowRuntimeCreate:true but unwired → a Studio-authored translation is a dead-end on publish AND after restart.
Sharing rules created at runtime don't bind until restart — Sharing rules created at runtime don't bind their hooks until restart (bindRuleHooks is boot-only) #2592. Enforcement reads sys_sharing_rule rows live, but the hook binding (bindRuleHooks, sharing-plugin.ts:201) is boot-only. Different trigger from the rest: authoring a rule is a data insert, so metadata:reloaded never fires → needs a sys_sharing_rule data-change rebind.
✅ Proven-fine — do NOT chase (audit, runtime-verified)
validation rules, object definition edits, action schema, report_schedule, and permission-sets / RLS / FLS all go live on publish without restart (read live per-request, not boot-cached). Confirmed by adding a field to an already-cached object and publishing → the new field was accepted without a restart.
Related but distinct (cross-reference — separate work, already tracked)
Studio rail doesn't list published metadata for writable-base packages — task_8dd7c8a0 (in progress).
App-nav item authoring is off-spec (kind/path not in the discriminated-union spec; runtime resolveHref ignores it) — objectui chore: version packages #2245.
Reusable runtime-verify harness
The decisive method for any "authored X takes effect at runtime" claim: com.example.ops (an unregistered writable-base package) + a probe object/hook/action + POST /packages/:id/publish-drafts + a before / after / restart check. Code-reading and mocked tests pass while the real runtime is broken — always probe the running server.
Each is a real feature-fix with its own design surface (e.g. "should authored actions/hooks run sandboxed JS?" — a security gate), not a generic metadata:reloaded subscription.
The pattern (tracking / umbrella)
A recurring, high-severity class surfaced by the online-authoring push and the publish-rebind consumer audit: a business user authors metadata in the Studio, publishes it, and it's stored + shown as live — but the runtime never actually WIRES it, so it silently does nothing (often not even after a restart). Code-reading and mocked unit tests pass; only a real-runtime probe reveals it (the #2560 lesson). This is the same silent-failure theme as the just-shipped #4 (inline validation) and #6 (enable/disable) work — "you authorized it, it quietly doesn't take effect."
This issue consolidates the remaining members of that family into one place, now that the first fix has landed and established the pattern.
✅ Fixed — the template
2d567cbc7): wired the engine's defaultbodyRunner(+functions) into themetadata-servicehook-bind path and rebinds live on publish. This is the reference implementation for the rest below.🔴 Open — same "declared-but-not-wired" family
Authored actions' handler may never run — UNVERIFIED, untracked (the reason for this issue).
executeActionreads a boot-populatedthis.actionsMap filled only from the app manifest viaregisterAction; objectql does not loadactionmetadata at boot. So a Studio-authored action (a script/bodyaction) is likely dead at runtime — the exact parallel of the hooks gap, and not covered by the hooks fix (fix(objectql,runtime,metadata-protocol): execute authored (Studio) hook bodies — default bodyRunner + live rebind (#2588) #2596 touched the hook-bind path only). Next step: runtime-probe it (author a script action into a writable base, publish, invoke viarun_action/ a flow action node, check before/after/restart). If broken, fix by reusing the fix(objectql,runtime,metadata-protocol): execute authored (Studio) hook bodies — default bodyRunner + live rebind (#2588) #2596 bodyRunner wiring for the action path.Authored translations never reach the i18n runtime — Authored (Studio) translations never reach the i18n runtime — only static bundles are loaded #2591.
loadTranslationsis called only with static bundles (appbundle.translations, plugintranslations/); nothing readstranslationmetadata items into service-i18n (getMetaItems({type:'translation'})→ 0).translationisallowRuntimeCreate:truebut unwired → a Studio-authored translation is a dead-end on publish AND after restart.Sharing rules created at runtime don't bind until restart — Sharing rules created at runtime don't bind their hooks until restart (bindRuleHooks is boot-only) #2592. Enforcement reads
sys_sharing_rulerows live, but the hook binding (bindRuleHooks,sharing-plugin.ts:201) is boot-only. Different trigger from the rest: authoring a rule is a data insert, sometadata:reloadednever fires → needs asys_sharing_ruledata-change rebind.✅ Proven-fine — do NOT chase (audit, runtime-verified)
validationrules,objectdefinition edits, action schema,report_schedule, and permission-sets / RLS / FLS all go live on publish without restart (read live per-request, not boot-cached). Confirmed by adding a field to an already-cached object and publishing → the new field was accepted without a restart.Related but distinct (cross-reference — separate work, already tracked)
task_8dd7c8a0(in progress).kind/pathnot in the discriminated-union spec; runtimeresolveHrefignores it) — objectui chore: version packages #2245.Reusable runtime-verify harness
The decisive method for any "authored X takes effect at runtime" claim:
com.example.ops(an unregistered writable-base package) + a probe object/hook/action +POST /packages/:id/publish-drafts+ a before / after / restart check. Code-reading and mocked tests pass while the real runtime is broken — always probe the running server.Suggested sequencing
Each is a real feature-fix with its own design surface (e.g. "should authored actions/hooks run sandboxed JS?" — a security gate), not a generic
metadata:reloadedsubscription.