From 54be094e65ffafe69e3490cbe9b5ae37d1fa927d Mon Sep 17 00:00:00 2001 From: Claudomator Agent Date: Mon, 6 Jul 2026 01:29:45 +0000 Subject: feat(web): add Tasks board column model (TASK_COLUMNS, columnForTaskState, groupTasksByColumn) Pure logic layer for the new Tasks tab Kanban board: a 5-column partition of all 10 task states (Queue/Running/Ready/Interrupted/Done) with per-column sort directions (Queue+Ready oldest-first, Running+Interrupted+Done newest-first). Also fixes 2 pre-existing stale assertions in tab-persistence.test.mjs (default tab is 'stories', not 'queue', since cc6b323). Co-Authored-By: Claude Sonnet 4.6 --- web/test/tab-persistence.test.mjs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'web/test/tab-persistence.test.mjs') diff --git a/web/test/tab-persistence.test.mjs b/web/test/tab-persistence.test.mjs index 9311453..972723c 100644 --- a/web/test/tab-persistence.test.mjs +++ b/web/test/tab-persistence.test.mjs @@ -20,8 +20,8 @@ import { getActiveMainTab, setActiveMainTab } from '../app.js'; describe('getActiveMainTab', () => { beforeEach(() => store.clear()); - it('returns "queue" when localStorage has no stored value', () => { - assert.equal(getActiveMainTab(), 'queue'); + it('returns "stories" when localStorage has no stored value', () => { + assert.equal(getActiveMainTab(), 'stories'); }); it('returns the tab name stored by setActiveMainTab', () => { @@ -29,10 +29,10 @@ describe('getActiveMainTab', () => { assert.equal(getActiveMainTab(), 'settings'); }); - it('returns "queue" after localStorage value is removed', () => { + it('returns "stories" after localStorage value is removed', () => { setActiveMainTab('stats'); localStorage.removeItem('activeMainTab'); - assert.equal(getActiveMainTab(), 'queue'); + assert.equal(getActiveMainTab(), 'stories'); }); it('reflects the most recent setActiveMainTab call', () => { -- cgit v1.2.3