Skip to content

workflow: Hand a task names each lane's Project in its pick list - #2242

Merged
Birfy merged 1 commit into
ThinkFlowLab:mainfrom
HugoXK:dev/1-p450-assign-dialog-project
Nov 3, 2026
Merged

Birfy merged 1 commit into
ThinkFlowLab:mainfrom
HugoXK:dev/1-p450-assign-dialog-project

Conversation

@HugoXK

@HugoXK HugoXK commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #2241

Owner: Dev
Written-by: Dev-1
Reviewer: Birfy
Claim-Id: 0b70a4567eb74831a7cb661cebd26ae2
Branch: dev/1-p450-assign-dialog-project
Base: 7d1f1bb
Tier: T2 (gate reading at this tip: computedTier = T2, exemptFromPass = false; plugins/** matches, and the highest matching path tier wins)
Tree: 35f280d730782100cfa77720c836488f47abb342
Verified tree: 35f280d730782100cfa77720c836488f47abb342 — npm run verify ran on this tree in local commit 4c2f74b811194c7fac9558a7cfb0243bc0b60dfd, which was never pushed and which GitHub cannot resolve
Pushed head: 65914e2 (same tree 35f280d730782100cfa77720c836488f47abb342, generated from it by the push path)
Files: 4 changed, +88/−4
Single parent: 7d1f1bb

What changes

The Hand a task to a Workflow dialog drew each lane's name and chain, never its Project, so two
lanes from different Projects read exactly alike at the moment a card is handed over. The list row
already repeats that badge from the same projects listing (client.js:2232), so AssignModal
now takes projects, resolves the name once through projectName(id), and draws the same
wf-proj span after the Workflow badge on every target row (wf-t1).

A lane with no projectId draws no badge at all, not an Unassigned placeholder (owner decision in
#2241): the dialog is a choice, not the list, so the absent badge already says "no Project" and a
placeholder would add one more sentence to translate for no information. The list row's own
Unassigned branch stays exactly as it was.

Nothing else moves. The assign call gains no projectId argument, confirmAssign's submit body is
byte-identical (the third test pins it), the card row is untouched, and AssignModal's existing
error slot keeps the shape #2237 gave it.

Docs: the Project paragraph of docs/subsystems/workflow.md now names the dialog. Changelog:
changelog.d/2241-hand-a-task-project-badge.added.md.

Red first

Run on the live base 7d1f1bb7 with the test file from this branch and the source at that base
(git show 7d1f1bb7:plugins/workflow/client.js > plugins/workflow/client.js):

$ TZ=UTC node --test plugins/workflow/test/client.test.js
not ok 148 - #2241: the Hand a task dialog names each lane's Project
  the first lane names its Project, saw Lane AWorkflowPlanner → Writer → Coder → Reviewer ‖ Tester → Deployer
not ok 149 - #2241: a lane with no Project carries no Project badge
  only the two lanes that have a Project draw the badge
  0 !== 2
ok 150 - #2241: picking a lane still posts the same assign body
# tests 150
# pass 148
# fail 2

Read against the issue's own two counter-cases: not ok 149 shows the base draws zero Project
badges in the dialog, and ok 150 is already green there — this change must leave the submit body
alone, and the third test keeps it that way.

With the fix in place the same file runs # tests 150 / # pass 150 / # fail 0.

Files

4 files, +88/−4: plugins/workflow/client.js (+8/−3 — one prop, one resolver, one badge),
plugins/workflow/test/client.test.js (+78), docs/subsystems/workflow.md (+1/−1),
changelog.d/2241-hand-a-task-project-badge.added.md (+1).

Ran

  • Red first above on 7d1f1bb7, then TZ=UTC node --test plugins/workflow/test/client.test.js →
    150/150/0 on the fixed tip, and npm --prefix plugins/workflow test → 392/392/0.
  • TZ=UTC ARCH_DOCS_BASE=7d1f1bb7ed2f097beb5376eb48f08cfeed794c3b npm run verify → exit 0,
    4569/4569/0: core 2674, social 570, tree 131, timeline 140, workflow 392, .github/scripts
    599, interop 37, live-e2e 26.
  • In that chain: arch-docs: OK (4 changed file(s)); ok core/ equals ds-bot/ + patches/ds-bot/;
    ok 10 patches apply cleanly in order; ok patches/ds-bot/ is what generate writes (generate is a no-op); build-client.mjs --check green; all four packed plugins imported; the changelog.d/
    check green.

Not run

  • The smoke test: core/index.js and core/src/host/ are untouched.
  • The CI package job's typecheck, actionlint and pack check — npm run verify does not run them.
  • npm_config_cache pointed at a workspace directory for this run: ~/.npm is read-only in this
    sandbox and the plugin lint's npm pack step writes a cache. Nothing else in the suite depends
    on it.

Checkpoint

{
"pr": 2242,
"claim": "Dev",
"issue": 2241,
"summary": "The Hand a task to a Workflow dialog now names each lane's Project on its target row, reusing the wf-proj badge and projects listing the list row already draws, so two lanes from different Projects no longer read alike at the pick point. A lane with no Project draws no badge, by owner decision, instead of an Unassigned placeholder. The assign call gains no projectId argument and confirmAssign's submit body is unchanged. Docs and a changelog fragment name the dialog.",
"files": [
"plugins/workflow/client.js",
"plugins/workflow/test/client.test.js",
"docs/subsystems/workflow.md",
"changelog.d/2241-hand-a-task-project-badge.added.md"
],
"checks": {
"ran": "TZ=UTC ARCH_DOCS_BASE=7d1f1bb7ed2f097beb5376eb48f08cfeed794c3b npm run verify",
"result": "green",
"at": "65914e2fa53c26c0bc43ae3420b379c7ea8bf1c2"
},
"next": "T2: waiting for Birfy's PASS at head 65914e2; the pushed head carries the identical tree 35f280d7."
}

Two lanes from different Projects read the same inside the assign dialog:
the target row carried the name and the chain, never the Project the list row
already draws. The dialog now repeats that badge from the same projects
listing, and a lane with no Project draws none.
@Birfy

Birfy commented Nov 3, 2026

Copy link
Copy Markdown
Collaborator

Verdict: PASS at 65914e2
Written-by: Reviewer
Attestation: 65914e2 role=Reviewer

Ran at this tip:

$ cd w2242/tip && TZ=UTC node --test plugins/workflow/test/client.test.js
# tests 150  # pass 150  # fail 0
$ cd w2242 && cp base/plugins/workflow/client.js red/plugins/workflow/client.js && cd red && TZ=UTC node --test plugins/workflow/test/client.test.js
# tests 150  # pass 148  # fail 2
$ cd w2242/tip && TZ=UTC npm --prefix plugins/workflow test
# tests 391  # pass 390  # fail 1

Red first, as required: on the tip tree with only plugins/workflow/client.js swapped back to its 7d1f1bb7 blob (the tip's tests kept), the two new cases go red — not ok 148 (the pick row drew Lane AWorkflow, its Project badge absent) and not ok 149 (0 Project badges where 2 lanes have one, 0 !== 2) — while ok 150 (the assign body is unchanged) already passes on the base, which is the point of that third test. Restoring the tip file puts all 150 back to green.

Review points:

  • The change is the one the issue names: AssignModal gains projects, resolves a name once via projectName(id) over the same listing the list row already uses (client.js:2232), and draws a wf-proj span after the Workflow badge on each target row; a lane with no projectId draws no badge (owner decision in workflow: Hand a task lists lanes by name only — the dialog never says which Project the choice files into #2241), and the list row's own Unassigned branch is untouched. The assign call gains no projectId, and confirmAssign's submit body is unchanged — pinned by the third test.
  • Workflow plugin suite at this tip is 391 tests / 390 pass / 1 fail, and that one is not ok 21 - test/host.test.js: it fails identically at base 7d1f1bb7 (388/387/1), so it is the box's missing host deps, not this diff. The affected file is otherwise green.
  • Check-runs at this tip (15): the only red is enqueue-guard, whose own reason is do not enqueue #2242: no Verifier report names the tip 65914e2fa53c — the pre-verdict state, not a code failure. tests-ok, package, judge, the four plugins jobs, Node 24, merge-gate, risk tier (report only), reviewed tip are all success; no hold.
  • Scope: compare 7d1f1bb7…65914e2f is one commit on a single parent, 4 files / +88/−4 — plugins/workflow/client.js (+8/−3), plugins/workflow/test/client.test.js (+78), docs/subsystems/workflow.md (+1/−1), changelog.d/2241-hand-a-task-project-badge.added.md (+1). Exactly the declared set, nothing outside the issue.
  • Docs and changelog both name the dialog, so the Project paragraph and the fragment stay in step with the code.
  • Checkpoint block is compliant: 1082 characters with markers, summary 470, next 99, 4 files all in this diff, checks.at = this tip, ran = the npm run verify the author reports green on the identical tree 35f280d7.
  • Metadata: body carries Owner: Dev / Reviewer: Birfy (not the same name). The head lives in HugoXK/FlyBot, a fork, so agent-pr is not asked of it — same reading as social: a read-only window's read endpoints write no settings file #2236.

Not run here: the full npm run verify — this box has no dev/harness / jsdom deps, so only the affected suite and its red control were executed; tests-ok, plugins (workflow) and package are green on this very tip. The CI package job's typecheck, actionlint and pack check were likewise not run locally. Nothing else needed holding.

@github-actions github-actions Bot added the pass label Nov 3, 2026
@Birfy
Birfy added this pull request to the merge queue Nov 3, 2026
Merged via the queue into ThinkFlowLab:main with commit 6f862cd Nov 3, 2026
14 of 15 checks passed
@Birfy
Birfy deleted the dev/1-p450-assign-dialog-project branch November 3, 2026 01:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

workflow: Hand a task lists lanes by name only — the dialog never says which Project the choice files into

2 participants