gsxdsm
77d11a0a9a
docs(core): resolveLifecycleColumns returns one id per role, not a set ( #3111 )
...
Comment-only. No behaviour change. `tsc` 0 errors, eslint clean, `census
--strict` and `check:fnxc-future-dates` exit 0.
## Why this is worth a PR
Three fleet PRs have independently read this function's fields as
**membership**:
| where | finding |
|---|---|
| `self-healing.ts` `hold` guard | **#3084**, `Major` — *"resolve `hold`
by membership, not first-per-role"* |
| `notification-service.ts` progressed-lane check | **#3096** — reads
`?.hold / ?.wip / ?.complete / ?.archived` |
| sync vs async review set | **#3088** — same shape, different symptom |
Each field is a **single id**: the first column carrying that trait. A
board may declare several columns with one role — two pre-review working
lanes, or a review lane plus a merge-blocked lane — and every one after
the first is invisible.
Used for membership, that reads as a working check while silently
ignoring lanes: a card resting in the second hold column classifies as
**not-held**, and the guard depending on it never fires. It is the quiet
direction of wrong, which is why it survives review three times.
**Three occurrences of one misreading is a property of the signature,
not three unlucky authors.** Fixing it at the call sites one at a time
leaves the next author to rediscover it, so this documents the contract
where the mistake is made — at the definition — and names the
alternatives:
- `columnsWithFlag(ir, role)` — every column with the role on one board
- `resolveProjectColumnsForRoles(store, roles)` — the union across a
project's workflows
Rule of thumb recorded in the doc: **a routing/move target wants this
function; a `.has(task.column)` test does not.**
## What this does not do
It does not fix the three call sites. #3084 's is a live `Major` and
needs a real fix with mutation verification; #3096 's needs its author to
resolve a two-implementation conflict first; #3088 's is flagged and
open. This only stops the fourth occurrence.
A stronger version would rename the fields (`firstHoldColumn`) or return
branded single-id types so misuse fails to compile. That is a wider
change across every caller and belongs to whoever owns the helper's API
— worth considering once the current fleet PRs land, since doing it now
would conflict with all three.
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-07-31 04:50:28 -07:00
..
2026-07-27 15:25:17 -07:00
2026-07-31 04:46:58 -07:00
2026-07-26 12:01:19 -07:00
2026-07-26 12:01:19 -07:00
2026-07-30 21:35:23 -07:00
2026-07-31 04:47:09 -07:00
2026-07-30 21:50:37 -07:00
2026-07-15 10:36:10 -07:00
2026-07-30 02:08:26 -07:00
2026-06-07 18:51:46 -07:00
2026-07-15 16:17:37 -07:00
2026-07-04 10:42:21 -07:00
2026-07-09 19:58:05 -07:00
2026-07-29 22:39:14 -07:00
2026-07-30 08:09:36 -07:00
2026-07-31 03:34:05 -07:00
2026-07-13 19:07:58 -07:00
2026-06-02 18:46:33 -07:00
2026-07-26 12:01:19 -07:00
2026-07-01 16:19:03 -07:00
2026-07-19 13:34:25 -07:00
2026-07-30 21:50:37 -07:00
2026-07-21 23:10:08 -07:00
2026-07-16 17:05:29 -07:00
2026-07-30 09:28:27 -07:00
2026-07-16 16:01:29 -07:00
2026-07-23 20:19:18 -07:00
2026-07-30 21:50:37 -07:00
2026-07-14 22:13:30 -07:00
2026-07-14 08:16:42 -07:00
2026-07-28 23:23:13 -07:00
2026-07-16 05:33:55 -07:00
2026-07-24 18:09:32 -07:00
2026-07-18 11:34:42 -07:00
2026-07-16 00:30:59 -07:00
2026-07-16 16:01:29 -07:00
2026-07-13 19:07:58 -07:00
2026-07-18 13:18:08 -07:00
2026-07-18 13:18:08 -07:00
2026-07-16 00:30:59 -07:00
2026-07-14 22:13:30 -07:00
2026-07-21 00:00:08 -07:00
2026-07-31 03:13:09 -07:00
2026-07-31 02:22:27 -07:00
2026-07-13 19:07:58 -07:00
2026-07-16 16:01:29 -07:00
2026-07-14 12:41:10 -07:00
2026-07-26 12:01:19 -07:00
2026-07-17 01:23:32 -07:00
2026-07-14 13:36:08 -07:00
2026-07-26 23:28:42 -07:00
2026-07-12 19:43:41 -07:00
2026-06-21 13:32:19 -07:00
2026-07-16 16:34:09 -07:00
2026-07-16 16:34:09 -07:00
2026-07-30 12:02:53 -07:00
2026-06-07 20:43:44 -07:00
2026-06-03 13:51:13 -07:00
2026-06-03 09:23:44 -07:00
2026-07-05 11:31:48 -07:00
2026-06-29 14:00:32 -07:00
2026-06-29 18:41:43 -07:00
2026-07-26 23:42:46 -07:00
2026-07-28 22:19:28 -07:00
2026-07-01 16:43:08 -07:00
2026-06-29 11:07:11 -07:00
2026-06-29 12:23:20 -07:00
2026-07-26 23:42:46 -07:00
2026-06-29 12:23:20 -07:00
2026-07-05 16:58:42 -07:00
2026-07-29 09:54:39 -07:00
2026-07-26 23:42:46 -07:00
2026-06-08 23:38:32 -07:00
2026-06-26 00:26:03 -07:00
2026-06-29 11:24:41 -07:00
2026-07-29 00:05:29 -07:00
2026-07-29 09:54:39 -07:00
2026-07-29 22:41:17 -07:00
2026-07-14 22:13:30 -07:00
2026-07-24 18:09:32 -07:00
2026-07-24 18:09:32 -07:00
2026-07-16 00:30:59 -07:00
2026-06-04 22:52:20 -07:00
2026-06-05 00:57:49 -07:00
2026-06-05 13:59:50 -07:00
2026-07-30 03:01:36 -07:00
2026-07-20 09:57:38 -07:00
2026-07-16 21:42:44 -07:00
2026-07-18 11:34:42 -07:00
2026-07-13 19:07:58 -07:00
2026-07-13 19:07:58 -07:00
2026-07-30 14:09:10 -07:00
2026-07-18 12:32:07 -07:00
2026-06-26 14:55:01 -07:00
2026-07-26 12:01:19 -07:00
2026-07-30 09:28:27 -07:00
2026-07-30 12:25:00 -07:00
2026-07-30 12:25:00 -07:00
2026-07-22 08:53:31 -07:00
2026-07-30 13:55:10 -07:00
2026-07-31 04:29:21 -07:00
2026-07-14 08:16:42 -07:00
2026-07-14 08:16:42 -07:00
2026-07-13 19:07:58 -07:00
2026-06-26 08:40:59 -07:00
2026-07-26 10:23:00 -07:00
2026-07-21 18:00:35 -07:00
2026-07-16 16:01:29 -07:00
2026-06-12 09:24:02 -07:00
2026-07-14 22:13:30 -07:00
2026-07-30 21:50:58 -07:00
2026-07-17 23:56:34 -07:00
2026-07-18 00:33:14 -07:00
2026-07-17 23:56:34 -07:00
2026-07-30 16:53:12 -07:00
2026-07-02 19:01:09 -07:00
2026-07-30 16:53:12 -07:00
2026-07-02 11:38:34 -07:00
2026-07-16 16:34:09 -07:00
2026-07-18 11:34:42 -07:00
2026-07-09 21:36:14 -07:00
2026-07-18 13:18:08 -07:00
2026-06-28 16:51:49 -07:00
2026-07-31 03:37:18 -07:00
2026-07-30 20:30:18 -07:00
2026-07-30 22:06:24 -07:00
2026-07-31 04:47:09 -07:00
2026-07-13 19:07:58 -07:00
2026-07-13 19:07:58 -07:00
2026-07-22 18:16:00 -07:00
2026-07-30 08:57:52 -07:00
2026-07-26 09:50:43 -07:00
2026-07-16 20:37:05 -07:00
2026-07-26 12:01:19 -07:00
2026-07-22 15:25:20 -07:00
2026-06-26 11:56:12 -07:00
2026-07-11 17:16:49 -07:00
2026-07-26 12:01:19 -07:00
2026-07-26 12:01:19 -07:00
2026-07-26 17:48:46 -07:00
2026-07-21 00:00:08 -07:00
2026-07-26 12:01:19 -07:00
2026-07-14 22:13:30 -07:00
2026-07-31 04:06:40 -07:00
2026-07-30 21:35:23 -07:00
2026-07-18 19:18:57 -07:00
2026-07-16 19:48:11 -07:00
2026-07-22 08:53:31 -07:00
2026-06-15 19:57:20 -07:00
2026-06-11 20:53:01 -07:00
2026-07-30 09:28:27 -07:00
2026-06-25 03:44:22 -07:00
2026-07-16 19:36:02 -07:00
2026-06-13 02:54:57 -07:00
2026-07-26 12:01:19 -07:00
2026-07-30 13:08:25 -07:00
2026-06-13 23:20:06 -07:00
2026-07-09 23:12:02 -07:00
2026-07-18 11:49:11 -07:00
2026-07-15 02:19:19 -07:00
2026-07-04 19:29:47 +00:00
2026-07-14 20:27:35 -07:00
2026-07-14 20:27:35 -07:00
2026-07-14 22:13:30 -07:00
2026-07-15 21:33:11 -07:00
2026-07-04 13:51:09 -07:00
2026-07-14 22:13:30 -07:00
2026-07-14 20:27:35 -07:00
2026-07-14 20:27:35 -07:00
2026-07-11 22:16:48 -07:00
2026-07-20 17:35:06 -07:00
2026-07-13 19:07:58 -07:00
2026-06-04 01:43:26 -07:00
2026-07-30 21:50:37 -07:00
2026-07-26 08:35:04 -07:00
2026-07-10 07:46:52 -07:00
2026-07-12 11:52:24 -07:00
2026-07-30 19:41:09 -07:00
2026-07-30 21:50:37 -07:00
2026-07-30 21:50:37 -07:00
2026-07-20 01:54:42 -07:00
2026-06-15 19:44:17 -07:00
2026-07-26 09:50:43 -07:00
2026-07-30 16:50:00 -07:00
2026-07-16 16:01:29 -07:00
2026-07-30 20:17:18 -07:00
2026-07-14 22:13:30 -07:00
2026-07-23 11:41:15 -07:00
2026-06-05 03:56:29 -07:00
2026-07-26 12:01:19 -07:00
2026-07-18 16:18:15 -07:00
2026-07-13 19:07:58 -07:00
2026-07-18 16:18:15 -07:00
2026-07-15 20:53:05 -07:00
2026-07-19 11:50:52 -07:00
2026-07-26 23:28:42 -07:00
2026-07-26 23:28:42 -07:00
2026-07-13 19:07:58 -07:00
2026-07-14 20:27:35 -07:00
2026-07-30 21:50:37 -07:00
2026-07-14 22:13:30 -07:00
2026-07-29 23:34:41 -07:00
2026-07-16 15:37:42 -07:00
2026-07-15 13:32:33 -07:00
2026-06-26 00:28:31 -07:00
2026-07-15 10:38:04 -07:00
2026-07-16 20:37:05 -07:00
2026-07-14 22:13:30 -07:00
2026-07-14 22:13:30 -07:00
2026-07-30 20:30:18 -07:00
2026-07-30 23:13:34 -07:00
2026-07-31 03:37:18 -07:00
2026-06-30 07:31:59 -07:00
2026-07-31 04:47:09 -07:00
2026-07-19 15:20:39 -07:00
2026-07-18 19:31:30 -07:00
2026-06-21 13:32:19 -07:00
2026-07-30 05:52:01 -07:00
2026-07-26 13:15:36 -07:00
2026-07-26 13:15:36 -07:00
2026-07-22 08:30:12 -07:00
2026-06-04 13:19:55 -07:00
2026-06-28 01:43:08 -07:00
2026-06-19 06:51:57 -07:00
2026-06-18 03:24:57 -07:00
2026-07-30 22:06:24 -07:00
2026-07-30 12:03:07 -07:00
2026-06-24 10:45:21 -07:00
2026-07-30 09:28:27 -07:00
2026-07-19 21:19:56 -07:00
2026-07-30 09:28:27 -07:00
2026-07-30 16:09:14 -07:00
2026-07-16 00:30:59 -07:00
2026-07-14 08:16:42 -07:00
2026-07-30 05:33:27 -07:00
2026-06-04 02:13:48 -07:00
2026-06-04 00:19:57 -07:00
2026-06-04 00:19:58 -07:00
2026-06-04 00:19:58 -07:00
2026-07-30 21:50:37 -07:00
2026-07-26 12:01:19 -07:00
2026-06-03 13:48:02 -07:00
2026-07-30 17:40:48 -07:00
2026-07-30 03:10:35 -07:00
2026-07-14 13:36:08 -07:00
2026-07-27 13:30:13 -07:00
2026-06-07 21:19:10 -07:00
2026-06-07 20:43:44 -07:00
2026-07-30 13:15:04 -07:00
2026-07-29 00:05:29 -07:00
2026-07-27 15:06:19 -07:00
2026-07-31 04:50:28 -07:00
2026-07-01 16:43:08 -07:00
2026-07-26 09:40:37 -07:00
2026-07-21 12:17:47 -07:00
2026-06-21 21:23:41 -07:00
2026-07-28 18:52:46 -07:00
2026-07-23 08:53:06 -07:00
2026-07-16 01:32:23 -07:00
2026-07-26 12:24:29 -07:00
2026-07-10 01:49:15 -07:00
2026-07-19 11:50:52 -07:00
2026-07-29 22:39:33 -07:00
2026-07-16 15:27:03 -07:00
2026-06-13 21:17:20 -07:00