Publishes slack.slackTemplate.*; null where nothing writes.
Protected ReadonlycacheProtected ReadonlydbStaticinstanceThe process service: the shared database, Valkey and the internal bus.
Discards the draft; the version stays as history.
The template one post renders: its row, null when there is none (an
unregistered ref, or a migration not yet applied). The caller skips a
DISABLED one.
ProtectedinvalidateClears the cached rows; every write calls it after commit.
Renders a saved version (the draft by default, else the live one; version
picks any) or the registry default for a [TEST] post. Variables are the
registry samples for sampleCase, never live data. Where it posts is the
caller's: always the TEMPLATE_TEST feed, never a customer channel.
Every registered row, in registry order: audience, key, variant.
A template's saved versions, newest first. Uncached: rows are immutable.
One change to one template: blocks validates and saves a new draft
version, status switches it on or off, liveVersion activates the draft,
rolls back to an older version, or (null) resets to the registry default.
The acting admin, adusr_…; a saved version records it as its author.
Authoring for
b2b.slack_template(docs/proposals/SLACK_TEMPLATES.md §4). Single actor: whoever saves a draft may activate it. Rows are seeded by migration, so every write targets an existing row by itsslacktpl_…id, and every write clears the posters' cached read.