KrillApp.Project.TaskList.json had a local-limitation sentence at the end
of its description field (“Locally-hosted task lists do not fire executors
or send notifications. Move the list to a Krill server for those behaviors.”)
but KrillApp.Project.Journal.json and KrillApp.DataPoint.json — the other
two node types that graduated to requiresServer=false — had no equivalent
copy. Users reading the editor’s info panel for a locally-hosted Journal or
DataPoint received no prompt explaining what they give up by staying local.
The description updates were done incrementally as each node type’s
requiresServer flag was flipped; TaskList was updated but Journal and
DataPoint were missed in the same sweep.
Added one sentence to each of the two omitted JSON resource files:
shared/src/commonMain/resources/KrillApp.Project.Journal.json — “Locally-hosted journals stay on this device — they don’t sync across your phones, tablets, or Pis, and aren’t backed up off-device. Move the journal to a Krill server to share and persist it across the swarm.”shared/src/commonMain/resources/KrillApp.DataPoint.json — “Local DataPoints can’t trigger alerts, run calculations, or be reached by webhooks or MQTT. Move the DataPoint to a Krill server to wire it into Triggers and Executors.”Added a regression guard in RequiresServerFlagTest.localLimitationDescriptionsPresentInServerFreeNodes
that asserts each of the three server-free node types (Journal, DataPoint, TaskList) carries its
local-limitation phrase, so future description edits that remove the copy fail CI.
requiresServer=false on a node type, always update the description field in
the same PR to include the local-limitation copy. The three-part pattern (what is local, what
is lost, how to fix it) is the canonical shape.RequiresServerFlagTest guards all three current server-free
node types; extend it when future phases flip additional types.