Skip to content

fix(client): read one task row in the Inbox and on the Board - #1746

Merged
Birfy merged 3 commits into
mainfrom
dev/1739-task-status-one-source
Oct 30, 2026
Merged

Birfy merged 3 commits into
mainfrom
dev/1739-task-status-one-source

Conversation

@Birfy

@Birfy Birfy commented Oct 29, 2026 •

Copy link
Copy Markdown
Collaborator

Written-by: Claim 8c6c

Fixes #1739
Owner: Chief
Reviewer: Reviewer
Tip SHA: 55b1100
Base: 4916bd5
Docs-not-needed: the Inbox and the Board now share the existing task-row mapping; no subsystem contract changed, only the client rendering of it.

What was wrong, and which side changed

The Inbox was the side that read the row wrong. A task row that was never claimed carries status: 'open' (or 'claimed'), which src/shared/task-board.js:columnOf maps to the board column not-started — so the Board painted the reported five cards Not started, counter 0/5, and that read was correct. The Inbox had its own status derivation in src/client/inbox.js: it pushed open, claimed and working rows into the In progress group and aged every one of them from task.createdAt. That is exactly the reported picture: five never-started rows, created 63h earlier, shown as "In progress · for 63h" while the Board said Not started.

So this PR changes the Inbox read, not the Board and not the task row: the Inbox now classifies a row through columnOf(task) (the one mapping the Board already uses), and a card's age comes from the row's own clock — the working transition in the row's actors log, falling back to its own updatedAt — never from its creation and never from a wall clock or session/turn recency.

before after
open / claimed row In progress, age from createdAt no Inbox card (board column not-started)
working row In progress, age from createdAt (63h) In progress, age from the row's working transition

Files: core/src/client/inbox.js (the read), core/client.js (rebuilt by npm run build), core/test/inbox-task-status.test.js (the test), patches/ds-bot/ (the generated mirrors and patch 0008), one changelog fragment.

Red first

  • On base 4916bd5f, node --test test/inbox-task-status.test.js → 3 failing (a never-started row appears in In progress; the Inbox progress list is not the board's in-progress column; the age is the row's creation).
  • With the source change reverted and the test kept, the same 3 still fail; at the tip all 3 pass. Swapping only core/src/client/inbox.js back to the base blob is what I ran for the red evidence.

What I ran

  • cd core && node --test test/inbox-task-status.test.js — 3/3 green at the tip, 3/3 red on the base blob.

  • cd core && npm run build — core/client.js regenerated, not hand-edited.

  • node scripts/ds-bot-patches.mjs check — core/ equals ds-bot/ + patches/ds-bot/.

  • npm run verify at the repo root — see the Ran note below.

  • node --test ".github/scripts/*.test.mjs" at the repo root — the strict git-free applier test (#978) and the changelog check pass; the two update-branch tests that clone/fetch cannot run in this sandbox (no git transport), they pass on CI.

Not run

  • The browser UI itself (no local DSH bench in this session): the change is exercised at the model level through inboxModel, the same entry the Inbox renders from.
{
  "pr": 1746,
  "claim": "Chief",
  "issue": 1739,
  "summary": "The Inbox classified a never-claimed task row as In progress and aged it from its creation, so five rows read 'In progress for 63h' while the Board painted the same rows Not started. The Board's read was correct; the Inbox now classifies through the shared columnOf mapping and ages a card from the row's own working transition. A row that never started gets no card and no age. Test covers both paths over one set of rows and is red on the base blob.",
  "files": ["core/src/client/inbox.js", "core/client.js", "core/test/inbox-task-status.test.js", "changelog.d/1739-task-status-one-source.fixed.md", "patches/ds-bot/files/src/client/inbox.js", "patches/ds-bot/0008-client-bundle.patch"],
  "checks": { "ran": "cd core && node --test test/inbox-task-status.test.js; node scripts/ds-bot-patches.mjs check", "result": "green", "at": "55b1100c0e8368cbd8f639c449445986cc59e963" },
  "next": "Reviewer: judge the Inbox read against columnOf; then queue check, tests-ok and merge."
}

The Inbox showed a task that was never claimed as "In progress" and aged it from
its creation, so the same rows read "In progress · for 63h" while the Board
painted them Not started (0/5). The Inbox now reads the row through the board's
own column mapping, so a not-started row is not an In progress card, and a card
ages from the moment the row started instead of its creation (#1739).

Docs-not-needed: the Inbox and the Board now share the existing task-row mapping;
no subsystem contract changes, only the client rendering of it.
@Birfy Birfy added the agent-pr Pull request opened by an agent label Oct 29, 2026
@Birfy Birfy self-assigned this Oct 29, 2026
Birfy added 2 commits October 30, 2026 08:10
The fragment is assembled behind a bullet, so it carries no leading "- " (#1739).

Docs-not-needed: the Inbox and the Board now share the existing task-row mapping;
no subsystem contract changes, only the client rendering of it.
The generated 0008 patch ended two lines early, so a strict applier read blank lines
as hunk lines (#1739).

Docs-not-needed: the Inbox and the Board now share the existing task-row mapping;
no subsystem contract changes, only the client rendering of it.
@github-actions github-actions Bot added the risk:T1 Risk tier T1 (client, tests, generated files), set by the controller from the diff label Oct 30, 2026
@Birfy
Birfy added this pull request to the merge queue Oct 30, 2026
Merged via the queue into main with commit 07e2b98 Oct 30, 2026
13 of 14 checks passed
@Birfy
Birfy deleted the dev/1739-task-status-one-source branch October 30, 2026 00:25
@github-actions github-actions Bot removed the agent-pr Pull request opened by an agent label Oct 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:T1 Risk tier T1 (client, tests, generated files), set by the controller from the diff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Inbox and Board show different status for the same tasks (In progress vs Not started)

1 participant