Files
fusion/.changeset/origin-workflow-selection.md
gsxdsm 3f33cb000f feat: per-origin workflow selection + feedback-derived refinement titles
Two task origins had no workflow picker in front of the operator and always
inherited the project default: `fn task create` (CLI + the `fn_task_create`
agent tool) and refinement tasks. Add a Project General setting for each, where
blank/unset means "Selected workflow" (the operator's current Board lane,
falling back to the project default) and a concrete id pins that origin.

Because the Board lane lives in browser localStorage, non-browser callers could
not resolve "Selected workflow" at all. `boardSelectedWorkflowId` mirrors the
lane into project settings so they can. Note this makes the mirrored lane
project-scoped: two operators on one project share it, last switch wins. The
Board never reads it back, so the only effect is which workflow a newly created
task inherits.

Resolution is `TaskStore.resolveOriginWorkflowOverrideId(origin)`: pinned
setting -> mirrored lane -> `undefined` to inherit each caller's existing
default-workflow path unchanged. A deleted or fragment id degrades to inherit
rather than throwing, so a stale settings value can never break task creation.
An explicit `workflow_id` argument to `fn_task_create` still wins.

Separately, a refinement is now titled by the operator's own feedback via the
shared `deriveFallbackTaskTitle`, not `Refinement: <parent title>`. Ten
refinements of one task previously rendered ten identical titles, so the board
could not tell them apart while the text saying what each one asked for sat in
the description. Provenance moves to a `Refines <id>` card chip alongside the
existing detail-view parent link and dependency edge.

Verified: merge gate (299 tests), lint, full build, and typecheck for core, CLI,
and dashboard all pass. New coverage: origin resolution across both origins and
the full precedence ladder, the two settings pickers, the board-lane mirror,
refinement titling (including sibling distinctness), and the card chip.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-26 20:33:25 -07:00

988 B

@runfusion/fusion
@runfusion/fusion
minor

summary: Pick the workflow for CLI/agent-created and refinement tasks, and title refinements by your own feedback. category: feature dev: Adds project settings taskCreateWorkflowId and refinementTaskWorkflowId (blank/unset = "Selected workflow"), plus boardSelectedWorkflowId, a dashboard-written mirror of the current Board lane so non-browser callers can resolve that option. Resolved by TaskStore.resolveOriginWorkflowOverrideId(origin) — pinned setting, then mirrored lane, then undefined to inherit the existing project-default path; an unknown or fragment id degrades to inherit. Consumed by fn task create, fn_task_create (an explicit workflow_id argument still wins), and refineTask. New route PUT /api/project/board-selected-workflow. Separately, refineTask now titles the new card with deriveFallbackTaskTitle(feedback) instead of Refinement: <source title>, and TaskCard renders a Refines <id> provenance chip.