BL-096 Shipped

In-app scene-to-stage linking

DMs can now link a stage or article to an adventure node from the web app, not just via the add_adventure_component MCP tool. New AdventureComponentsController (create/destroy) nested under adventure_nodes, gated by AdventureComponentPolicy (create?/destroy? already existed). Shared adventure_nodes/_components partial renders the component list (with an inline Remove button_to per row) plus an “Add” form with two article-select searchable dropdowns (stage + article, pick one), a role select, and a notes field; used in both the scene and beat branches of the node show page, so editors see the form even on empty nodes. AdventureNodesController#show loads @candidate_articles (world-scoped) and @candidate_stages (campaign-scoped if the adventure has a campaign, else the DM’s own) only when policy(@adventure).update?. No new MCP tools needed – create/destroy parity already shipped with BL-082. 5 new controller tests, 642 total green.