[Foundry] "Push update" for already-linked NPCs #156
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Motivation/Context
Once an NPC has been pushed once (directory or live scene), GMs will regenerate stats or backstory (#130) and want to push the update to the already-linked Foundry actor rather than create a duplicate. The live-push investigation (2026-07-15) flags this as an explicit open question (§6.8): "when a GM regenerates a stat block after pushing, does 'Send' update the live actor mid-combat?" — with a proposed v1 answer of yes, with explicit confirmation, touching only Quest Board-owned fields.
Approach
When
foundry_links(#146) already has a link for the entry being pushed, "Send to Foundry" becomes "Push update": re-push overwrites only Quest Board-owned fields on the linked actor — biography/backstory text, stat rows mapped by #148, and token image (#150) — and explicitly never touches fields Quest Board doesn't own, such as current HP-in-combat or other GM edits made directly in Foundry. This is a deliberate v1 simplification (create-once + explicit overwrite-with-confirmation) rather than a three-way merge, per the investigation's §4.3 update-semantics guidance.Require an explicit confirmation dialog before overwriting an already-linked actor (per the open question in §6.8 — ship the "yes, with confirm" answer as v1, subject to playtesting feedback).
Add a stale-push indicator: using
foundry_links.last_pushed_at/last_push_hash(#146), surface in the UI (WikiArticle/CampaignPlanning, extending #154) when the sourceLoreEntryhas changed since the last push, so the GM knows a push is out of date without needing to remember.Dependencies
foundry_links) — this issue is the update-semantics consumer of that table's link data and hash tracking.Out of scope
Acceptance criteria
LoreEntryhas changed sincelast_pushed_at.