[object Object]

← back to Ticket System

board: add DW section (mirror of Non-DW) so the dotbar's dw chip drills into its own list

2a97ecd734cb47d0fb28f760b9ee7fb13ae20d77 · 2026-09-25 11:47:20 -0700 · Steve Abrams

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AeMJYTDYXnN6A6A1mW7Yud

Files touched

Diff

commit 2a97ecd734cb47d0fb28f760b9ee7fb13ae20d77
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Fri Sep 25 11:47:20 2026 -0700

    board: add DW section (mirror of Non-DW) so the dotbar's dw chip drills into its own list
    
    Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01AeMJYTDYXnN6A6A1mW7Yud
---
 board.html | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/board.html b/board.html
index 69c86585..1a31d5d4 100644
--- a/board.html
+++ b/board.html
@@ -124,7 +124,7 @@
 </style></head><body>
 <div class="stickytop">
 <div class="topnav">
-  <nav class="globalnav" aria-label="Fleet viewer"><button data-section="all">All</button><button data-section="open">Open</button><button data-section="blocked">Blocked</button><button data-section="doing">Doing</button><button data-section="parked" title="Durably parked tickets (parked.mjs registry) — held out of the active queue">🩷 Parked</button><button data-section="nondw" title="Tickets NOT related to Designer Wallcoverings">Non-DW</button><button data-section="agents">Agents</button><button data-section="skills">Skills</button></nav>
+  <nav class="globalnav" aria-label="Fleet viewer"><button data-section="all">All</button><button data-section="open">Open</button><button data-section="blocked">Blocked</button><button data-section="doing">Doing</button><button data-section="parked" title="Durably parked tickets (parked.mjs registry) — held out of the active queue">🩷 Parked</button><button data-section="dw" title="Tickets related to Designer Wallcoverings">DW</button><button data-section="nondw" title="Tickets NOT related to Designer Wallcoverings">Non-DW</button><button data-section="agents">Agents</button><button data-section="skills">Skills</button></nav>
   <button id="navPosBtn" class="navpos" title="Move nav bar below the toolbar" aria-label="Toggle nav bar position">⤓ Nav</button>
 </div>
 <header>
@@ -234,7 +234,7 @@ const LS=(k,d)=>{try{return JSON.parse(localStorage.getItem(k))??d}catch(e){retu
 let DATA=[], AGENTS=[], SKILLS=[], q='';
 const URLSTATE=new URLSearchParams(location.search);
 let SECTION=URLSTATE.get('section')||LS('tkSection','blocked'), LAYOUT=URLSTATE.get('layout')||LS('tkLayout','grid');
-if(!['all','open','blocked','doing','parked','agents','skills','nondw'].includes(SECTION))SECTION='blocked';if(!['grid','kv'].includes(LAYOUT))LAYOUT='grid';
+if(!['all','open','blocked','doing','parked','agents','skills','dw','nondw'].includes(SECTION))SECTION='blocked';if(!['grid','kv'].includes(LAYOUT))LAYOUT='grid';
 let CATALOG_SORT=LS('tkCatalogSort','name'), CATALOG_DIR=LS('tkCatalogDir',1), CATALOG_COLS=LS('tkCatalogCols',4);
 let sortKey=LS('tkSortKey','created_at'), sortDir=LS('tkSortDir',-1); if(!CK.includes(sortKey))sortKey='created_at';
 let VIEW=LS('tkView','task');
@@ -300,7 +300,7 @@ const DW_VENDOR=/(^|[^a-z])(sanderson|stroheim|muralsource|kravet|greenland|mali
 const DW_EXTRA=new Set(['norma','greenland-onboard','sample-followup','sample-followup-sweep','interiordesignershowroom','marketing-command-center','all-designerwallcoverings','consulting-designerwallcoverings-com','mfr-review-viewer','mfr-review-viewer-corruption','designersalesreps','vendor-command-center','discontinued-agent']);
 function isDW(t){if(t.segment==='dw')return true;if(t.segment==='nondw')return false;return autoDW(t);}
 function autoDW(t){const p=String(t.project||'').toLowerCase().trim();if(!p||DW_DENY.has(p))return false;return DW_EXTRA.has(p)||DW_RE.test(p)||DW_VENDOR.test(p)||DW_KW.test(p);}
-function match(t){if(VIEW!=='all'&&(t.kind||'task')!==VIEW)return false;if(['open','blocked','doing'].includes(SECTION)&&t.status!==SECTION)return false;if(['open','blocked','doing'].includes(SECTION)&&t.parked)return false;/*TK-11946: parked held out of the active queue (mirrors /kanban parked lane)*/if(SECTION==='parked'&&!(t.parked&&['open','doing','blocked'].includes(t.status)))return false;if(SECTION==='nondw'&&isDW(t))return false;if(!q)return true;
+function match(t){if(VIEW!=='all'&&(t.kind||'task')!==VIEW)return false;if(['open','blocked','doing'].includes(SECTION)&&t.status!==SECTION)return false;if(['open','blocked','doing'].includes(SECTION)&&t.parked)return false;/*TK-11946: parked held out of the active queue (mirrors /kanban parked lane)*/if(SECTION==='parked'&&!(t.parked&&['open','doing','blocked'].includes(t.status)))return false;if(SECTION==='nondw'&&isDW(t))return false;if(SECTION==='dw'&&!isDW(t))return false;if(!q)return true;
   // search the FULL thread — every comment (note/win/challenge/cody incl.) + every action — not just lastText
   const thread=[...(t.comments||[]).map(c=>c.text),...(t.actions||[]).map(a=>a.text)].join(' ');
   const hay=(t.id+' '+t.title+' '+(t.project||'')+' '+(t.assignee||'')+' '+t.status+' '+(t.kind||'task')+' '+JSON.stringify(t.schedule||{})+' '+thread).toLowerCase();
@@ -372,7 +372,7 @@ function renderCatalog(){
 function syncUrl(){const u=new URL(location.href);u.searchParams.set('section',SECTION);u.searchParams.set('layout',LAYOUT);history.replaceState(null,'',u);}
 function setSection(section){SECTION=section;save('tkSection',SECTION);syncUrl();q='';$('#q').value='';document.querySelectorAll('[data-section]').forEach(b=>b.classList.toggle('on',b.dataset.section===SECTION));render();}
 function initSectionTabs(){
-  const nav=$('.globalnav'),keys=['all','open','blocked','doing','parked','nondw','agents','skills'];
+  const nav=$('.globalnav'),keys=['all','open','blocked','doing','parked','dw','nondw','agents','skills'];
   let order=LS('tkSectionOrder',keys).filter(k=>keys.includes(k));for(const k of keys)if(!order.includes(k))order.push(k);
   const apply=()=>{for(const k of order){const b=nav.querySelector(`[data-section="${k}"]`);if(b)nav.appendChild(b);}};apply();
   nav.querySelectorAll('[data-section]').forEach(b=>{b.draggable=true;b.title='Drag to reorder tabs';

← 1316a653 board: per-ticket DW / Non-DW segment field (editable DW? co  ·  back to Ticket System  ·  auto-data-snapshot: 2026-09-25T11:52:49 (1 data files) — TK- d4f10cf6 →