--- type: feature-request id: fr-2026-03-09--threephoenix--state-hub--update-workstream-tool target_org: threephoenix target_repo: state-hub status: draft created: "2026-03-09" source_repo: railiance-infra related_workstream_id: bf40b47e-be5b-4930-a7d2-362e76b943bb --- # FR: `update_workstream` MCP Tool ## Problem The MCP server exposes `update_workstream_status` (status changes only) but no general `update_workstream` tool. This means fields like `repo_goal_id`, `title`, `description`, `owner`, and `due_date` cannot be updated via MCP once a workstream is created. This was discovered during offline-inbox drain: the workplan file `RAIL-HO-WP-0001` correctly references `repo_goal_id: 9e835b82-acca-493a-943f-2553ffe0bf54`, but the DB workstream (`bf40b47e`) has `repo_goal_id: null` because the field was not set at creation time. There is no tool to fix this without a direct API call. The `goal_guidance` section of `get_domain_summary()` then surfaces a false `needs_workplan` warning for the linked goal, because the DB record is incomplete. ## Proposed Solution Add an `update_workstream` MCP tool: ```python update_workstream( workstream_id: str, title: str | None = None, description: str | None = None, owner: str | None = None, due_date: str | None = None, # ISO date repo_goal_id: str | None = None, # UUID repo_id: str | None = None, # UUID ) ``` Semantics: patch — only provided fields are updated. Returns the updated workstream. ## Acceptance Criteria - Claude can set `repo_goal_id` on an existing workstream - Partial updates (only provided fields change, others unchanged) - `get_domain_summary()` goal_guidance reflects the updated linkage after the call ## Priority Medium. Workaround is a direct API call, but this breaks the MCP-only workflow and leaves audit gaps when agents operate without direct API access.