[GM Workbench] Workbench UX reorganization — tool palette + unified GeneratorPanel #153
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
GM Planning is currently a single stacked column (
max-w-2xl,webapp/frontend/src/pages/CampaignPlanning.jsx:780-785) hard-stacking fourSectionCardpanels:ArcBoard,BeatPlanner,ThreadTracker, andNameGeneratorPanel. That layout does not scale once the Workbench catalog grows past 1-2 generative tools (issues #141/#144/#147/#149 alone add descriptions, rumors, tables, and loot — each currently shipping its own minimal ad-hoc form/result-card panel per those issues' "Approach" sections). This issue replaces the stacked column with the two-pane workbench layout the report specs in §4, turning N bespoke panels into one parameterized surface.This is a Phase 2 "bigger surface" item — it makes the Workbench feel like a coherent product rather than a form collection, but is not required for any individual tool to function (#141, #144, #147, #149, #155, #158 all ship with their own minimal panels first and get migrated into this shell here).
Approach
ArcBoard,BeatPlanner,ThreadTracker) stay as pinned sections or a "Campaign structure" tab; below them, generator tools grouped as in the report's §3 taxonomy (Entities / Story / Improv / Media). On mobile the rail collapses to a select, keeping the page PWA-friendly per the v3.5.0 alignment note below.GeneratorPanelcomponent parameterized by tool definition (fields, category pickers, lore-entry pickers) instead of N bespoke panels.NameGeneratorPanel(CampaignPlanning.jsx:507) becomes the first tool rendered by it; the minimal panels shipped by #141, #147, #149 (description, random table, loot parcel — and #144's rumor tool if riding v3.7.0 in parallel) get migrated in as their ownGeneratorPaneltool definitions. Every result renders as a card with a consistent action row: Save as lore entry · Propose to existing entry (starts a merge/appendLoreEntryDraft, reusingWikiDraftReview.jsx) · Add as plot thread · Attach to session (appends tobeat_notes) · Re-roll · Pin · Copy.CampaignPlanning.jsx:545-548) becomes an optional "link to session" on save, since #136 already made the generation endpoint campaign-scoped. Saving to lore should never require a session.LoreEntryrows (visible in the wiki immediately, likesessions.py:288-296does today); content targeting an existing entry always goes through the draft review flow. Generated-but-unvetted prose defaults GM-only (gm_notes/ GM-onlysidebar_fieldsvisibility), matching #130's locked visibility decision.Dependencies
GeneratorPanel's data-fetching layer against the pre-v3.5.0 ad-hoc fetch wrappers means re-migrating it once v3.5.0 ships; sequence this issue after v3.5.0's shared client work completes.GeneratorPanelhere rather than rebuilt from scratch.Out of scope
Acceptance criteria
GeneratorPanel, right/bottom scratchpad & history rail.NameGeneratorPaneland all Workbench tools shipped so far (from #141, #147, #149, and #144 if applicable) render through the single parameterizedGeneratorPanelrather than bespoke components.Done — merged to
feat/v3.10-gm-workbenchvia PR #224.GM Planning is now a two-pane workbench: a grouped tool palette (Campaign structure · Entities · Story · Loot) on the left, the selected tool's panel in the center, and the persistent
GenerationHistoryscratchpad on the right (its "Re-open" switches the active tool). Responsive: 3 columns atlg, 2 atmd(history full-width below), single column on mobile with the palette collapsed to a grouped<select>.Scope / interpretation (flagging for your review): this pass delivers the palette + dispatcher + history-rail shell — acceptance criteria 1 (two-pane layout) and 5 (mobile collapse), with criterion 6 (shared API client) already satisfied. I deferred collapsing the eight already-shipped, tested bespoke panels into a single config-driven
GeneratorPanelwith one uniform action row (criteria 2/3): that would rewrite working, tested code — each tool has genuinely different inputs and result shapes — and the panels already share theWorkbenchResultActionslanding bar. Given you can't test on dev yet, I judged the lower-risk shell the right call for this milestone; the full config-driven collapse (and criterion 4's name-gen session-gate tidy) can be a focused follow-up if you want it. Let me know and I'll open a follow-up issue.Verified: frontend 397 passed / 42 files (layout-only, no regressions), eslint 0 errors, build OK. Backend untouched.