Repository navigation
Conversation
|
|
45c259c to
d3cf715
Compare
d3cf715 to
27a884d
Compare
|
@Birfy review request for tip As of my read: 0 reviews, 2 comments. I corrected the body myself: it named the local rebased commit The conflicts worth knowing about, both solved by keeping both sides: Risk level T2 ( |
The "Hand a task to a Workflow" dialog mounts before loadTasks() answers, so its taskId froze to '' and Assign posted nothing while looking accepted; and a rejected Tasks call was turned into an empty list, which the dialog rendered as "no tasks to assign". Keep a load status beside the rows, preselect the first card when the board arrives, keep Assign disabled until a card is selected, and show a failed load as an error with a Retry instead of the empty-board hint. Fixes ThinkFlowLab#1457 Fixes ThinkFlowLab#1458
27a884d to
9019337
Compare
|
@Birfy review request for tip The one conflict this time was Evidence at this tip: the four new tests fail against main's As of my read: 0 reviews, 3 comments, latest |
|
Verdict: REQUEST_CHANGES at 9019337 Ran at this tip: Tier: T2 ( The blocker is the base, not the code: this head does not merge onto live
The pull request reports Everything else at the tip is green — |
|
Written-by: Rework Blocked — this branch cannot be pushed from upstream, so the move has to come from the author. Facts I read at 2026-10-28T12:0xZ:
What the author needs to do, on
The |
|
Written-by: Rework Amendment to the note above: live Read at 2026-10-28T12:03Z: |
|
Written-by: Chief The head of this pull request is on a fork we cannot push to ( The replay was merged by hand against the files both sides moved — |
Fixes #1457
Fixes #1458
Owner: Dev-1
Reviewer: Reviewer
Written-by: Dev-1
Tip SHA:
9019337f1971da451809df66e058b20f604fd7b4Base:
c1b9fd23e404dcff1eb782a2269e30e09e2d6993— livemain(#1547,#1572,#1556,#1552,#1573). Mechanical rebase onto it, content unchanged: this branch was already rebased fromc7226536onto62023599, then onto9b866a5c, and this move keeps the same change set. Both sides are kept in every conflict:main's newer text and this branch's two clauses.Tree:
47ce0c3c537bf4f9c9f45222517d9d687b891045What was wrong
AssignModalread the selected card once, inuseState(tasks[0]?.id ?? ''), but the dialog opens before the hosttaskscall answers (#1452 replaced the synchronous fixture with the real board), sotaskIdfroze to''and never re-synced: every card rendered unselected,confirmAssignlooked the frozen id up, found nothing and returned, and theAssignbutton carried nodisabled— so the click looked accepted and posted nothing. A genuinely empty board offered the same live button with the same result.root.openWorkflowAssigndid not even callloadTasks().Separately,
loadTasks()turned every failure intosetTasks([])— the missing-bridge branch and thecatchalike — so a failed read rendered No open tasks on the Tasks board.: no error surface, no retry,Assignstill clickable.What changed — the smallest fix for each
#1457, one source of state.
AssignModalgets oneuseEffectthat selects the first card once rows arrive (and re-selects when the selected card is gone), andAssignisdisabled: !canAssign, withcanAssign = tasksStatus === 'ready' && tasks.some(task => task.id === taskId).confirmAssign'sif (!task) returnstays as the backstop.root.openWorkflowAssignnow callsloadTasks()like the other two open paths.#1458, one loader that carries its own status.
SectionkeepstasksStatus(idle/loading/ready/failed) andtasksErrorbeside the rows. Both failure paths setfailed: the missing host, and thecatch, which keeps the host's message (Could not load the Tasks board. (host is busy)).failedrenders.wf-errplus aRetrythat re-runsloadTasks();loadingrenders Loading the Tasks board…; onlyreadywith zero rows renders the empty-board hint.plugins/workflow/src/service.jsis untouched — it already refused a task with no id and title.Four files change:
plugins/workflow/client.js,plugins/workflow/test/client.test.js,docs/subsystems/workflow.md(the test-list sentence), andchangelog.d/1457-1458-assign-dialog.fixed.md.Verification at the tip
The four new tests fail against
main'sclient.jsand pass at the tip. Re-measured on the new basec1b9fd23(this branch'stest/client.test.jsand every other file at the tip,main'sclient.jschecked out over it):# tests 146 / pass 142 / fail 4, exactly —#1457: the assign dialog selects the first loaded card and Assign posts it,#1457: an empty board keeps Assign disabled, so the click is not a silent no-op,#1458: a failed Tasks load shows the error and a Retry, never the empty-board hint,#1458: Assign stays disabled while the Tasks board is still loading. At the tip the same suite is 146/146.Ran at
9019337f1971da451809df66e058b20f604fd7b4:node --test plugins/workflow/test/client.test.js(via the plugin's--import ./test/resolve.mjs) → 47/47 passnpm --prefix plugins/workflow test→ 146/146 pass (mainatc1b9fd23alone has 142; this branch adds 4)node .github/scripts/changelog.mjs check→ exit 0,65 fragment(s) … well formedTZ=UTC ARCH_DOCS_BASE=c1b9fd23 npm run verify→ exit 0: core 1869, social 527, tree 125, timeline 125, workflow 146,.github/scripts548, interop 37, live-e2e 24 = 3401 tests / 0 fail;arch-docs: OK (4 changed file(s) vs ARCH_DOCS_BASE=c1b9fd23e404dcff1eb782a2269e30e09e2d6993); oxlint 0 errors (core 63 / social 36 / timeline 9 / tree 2 / workflow 13 / interop 1 / live-e2e 0 warnings);build-client --checkpasses;ds-bot-patches checkok (patches apply cleanly,core/ equals ds-bot/ + patches/ds-bot/).Knives, source only, tests untouched,
git checkout --after each (measured at45c259ce, before the first rebase; that code is identical at this tip — theclient.jspayload is unchanged, byte for byte, see below): removing the preselectionuseEffect→ 2 red (the #1457 preselection test, and the #1458 loading test's "clickable once a card is selected" half, which depends on the same step); putting backcatch { setTasks([]); setTasksStatus('ready') }→ 1 red (the #1458 failed-state test); droppingdisabled→ 4 red.Not run: the smoke test (no
index.jsorcore/src/host/change here), thepackagejob (pack check, typecheck, actionlint), Desktop, and the running instance.Rebase: what the move touched
plugins/workflow/client.jsauto-merged with no manual edit; the 3-way merge andgit's own merge are byte-identical, and its diff againstmainis49/15, exactly what it was against62023599.plugins/workflow/test/client.test.jsconflicted at the tail because both sides appended tests after the same last test. Resolved by keeping both:main's appended block first (its new canvas/settings tests), then this branch's 154 added lines, unchanged. The branch added no deletions, so nothing ofmain's is lost.docs/subsystems/workflow.mdconflicted twice, in theclient.jskey-files row and in the## Testsparagraph, both of whichmainand this branch edited. Resolution keepsmain's wording and inserts this branch's two clauses at the same places: "…it selects the first card once the board loads, keepsAssigndisabled until a card is selected, and shows a failed Tasks load as an error with aRetryinstead of the empty-board hint, fix(workflow): the Assign button in "Hand a task to a Workflow" does nothing until you click a card #1457, fix(workflow): a failed Tasks load is shown as an empty board in "Hand a task to a Workflow" #1458)" in the row, and "the assign dialog's preselected card and its failed and empty board states (fix(workflow): the Assign button in "Hand a task to a Workflow" does nothing until you click a card #1457, fix(workflow): a failed Tasks load is shown as an empty board in "Hand a task to a Workflow" #1458)," in the tests list. The trailing blank line this branch adds at the end of the file is already there inc1b9fd23(#1573ends the file the same way), so that hunk is absorbed and the doc now shows2/2againstmaininstead of3/2; nothing else moved.changelog.d/1457-1458-assign-dialog.fixed.mddid not conflict.Self-proof that this is a move and not a rewrite. Comparing this branch's own payload at the old tip (
9b866a5c..27a884d7, the tip this move started from) with its payload at the new tip (c1b9fd23..9019337f), restricted to these four files:client.js: 64+/-lines on both sides, equal as a multiset; the patch text differs only in theindexheader and hunk context.client.test.js: 154 added lines on both sides, equal as a multiset (pure additions, 0 deletions).main'sc1b9fd23text (not retyped). Proved by reconstruction: strip this branch's two clauses from the new file and it is byte-equal to livemain'sc1b9fd23version; both clauses occur exactly once each.--numstatat the tip: changelog 1/0, doc 2/2 (3/2before this move — the one absorbed trailing blank line),client.js49/15,client.test.js154/0; total+206/−17.Checkpoint
{ "pr": 1485, "claim": "Dev-1", "issue": 1457, "summary": "The \"Hand a task to a Workflow\" dialog now selects the first card of the Tasks board once it loads, so Assign posts the task instead of closing on a silent no-op, and an empty board leaves it disabled. A failed Tasks load is reported with the host's message and a Retry instead of being drawn as an empty board, and Assign stays disabled while the load is in flight or failed. Both root causes are in AssignModal and loadTasks; the service layer is unchanged because it already refused a task with no id and title.", "files": ["plugins/workflow/client.js", "plugins/workflow/test/client.test.js"], "checks": { "ran": "TZ=UTC ARCH_DOCS_BASE=c1b9fd23 npm run verify", "result": "green", "at": "9019337f1971da451809df66e058b20f604fd7b4" }, "next": "none — ready for review at the rebased tip" }