[object Object]

← back to Agent Abrams Kanban

chore: lint (strict-eq, dedup .card rule) + refactor (cache stat els, single now() snapshot, cache avatar query) — session close

3dfa365718bfd6103be2df64ac74114b6b30027f · 2026-07-25 00:45:48 -0700 · Steve

Files touched

Diff

commit 3dfa365718bfd6103be2df64ac74114b6b30027f
Author: Steve <steve@designerwallcoverings.com>
Date:   Sat Jul 25 00:45:48 2026 -0700

    chore: lint (strict-eq, dedup .card rule) + refactor (cache stat els, single now() snapshot, cache avatar query) — session close
---
 index.html | 41 +++++++++++++++++++++++------------------
 1 file changed, 23 insertions(+), 18 deletions(-)

diff --git a/index.html b/index.html
index e4c0a0f..92d52e0 100644
--- a/index.html
+++ b/index.html
@@ -63,7 +63,6 @@ body::before{
 .controls button:hover{color:var(--ink);border-color:rgba(255,255,255,0.28);background:rgba(255,255,255,0.09)}
 .controls button.active{color:#06060b;background:var(--running);border-color:var(--running);box-shadow:0 0 12px rgba(0,229,255,.4)}
 .controls button.paused{color:#06060b;background:var(--shipped);border-color:var(--shipped);box-shadow:0 0 12px rgba(255,176,32,.4)}
-.card{cursor:pointer}
 
 .board{
   flex:1;min-height:0;
@@ -114,7 +113,7 @@ body::before{
   border-left:3px solid var(--muted);
   border-radius:10px;padding:11px 12px;
   box-shadow:0 4px 10px rgba(0,0,0,0.35);
-  will-change:transform;
+  will-change:transform;cursor:pointer;
 }
 .card.enter{animation:pop .45s cubic-bezier(.2,.9,.25,1.2)}
 @keyframes pop{from{opacity:0;transform:translateY(-8px) scale(.96)}to{opacity:1;transform:none}}
@@ -237,13 +236,15 @@ body::before{
 
   function makeTask(seedStage){
     const agent = pick(AGENTS);
+    const stage = seedStage || 'queued';
+    const t0 = now();
     const t = {
       id: ++uid,
       title: pick(TASK_NAMES)+"-"+rint(100,999),
       agent,
-      status: seedStage || 'queued',
-      createdAt: now(),
-      nextAt: now() + dwell(seedStage||'queued'),
+      status: stage,
+      createdAt: t0,
+      nextAt: t0 + dwell(stage),
       el: null,
     };
     t.el = buildEl(t);
@@ -293,9 +294,10 @@ body::before{
       t.agent = pick(AGENTS);
       t.createdAt = now();
       const initials = t.agent.n.slice(0,2).toUpperCase();
-      t.el.querySelector('.avatar').style.background = t.agent.c;
-      t.el.querySelector('.avatar').style.color = t.agent.c;
-      t.el.querySelector('.avatar span').textContent = initials;
+      const av = t.el.querySelector('.avatar');
+      av.style.background = t.agent.c;
+      av.style.color = t.agent.c;
+      av.querySelector('span').textContent = initials;
       t.el.querySelector('.title').textContent = t.title;
       t.el.querySelector('.agent').textContent = '◈ '+t.agent.n;
       moveWithFlip(t, 'queued');
@@ -307,7 +309,7 @@ body::before{
   function refreshCounts(){
     STAGES.forEach(s=>{
       const n = tasks.filter(t=>t.status===s).length;
-      if(counts[s].textContent != n) counts[s].textContent = n;
+      if(counts[s].textContent !== String(n)) counts[s].textContent = n;
     });
   }
 
@@ -346,6 +348,15 @@ body::before{
     setTimeout(()=>c.classList.remove('bump'),260);
   }
 
+  // ---- controls / cached stat elements ----
+  const btnPause  = document.getElementById('btnPause');
+  const btnSpeed  = document.getElementById('btnSpeed');
+  const btnSpawn  = document.getElementById('btnSpawn');
+  const elUptime  = document.getElementById('uptime');
+  const elShipped = document.getElementById('shipCount');
+  const elTput    = document.getElementById('tput');
+  const SPEEDS = [1,2,4];
+
   // ---- ticks ----
   function tickAdvance(){
     if(paused) return;
@@ -378,18 +389,12 @@ body::before{
     }
     // header stats (virtual clock => frozen while paused)
     const up = now() - startV;
-    document.getElementById('uptime').textContent = fmt(up);
-    document.getElementById('shipCount').textContent = shippedTotal;
+    elUptime.textContent  = fmt(up);
+    elShipped.textContent = shippedTotal;
     const mins = up/60000;
-    document.getElementById('tput').textContent = mins>0 ? (shippedTotal/mins).toFixed(1) : '0.0';
+    elTput.textContent = mins>0 ? (shippedTotal/mins).toFixed(1) : '0.0';
   }
 
-  // ---- controls ----
-  const btnPause = document.getElementById('btnPause');
-  const btnSpeed = document.getElementById('btnSpeed');
-  const btnSpawn = document.getElementById('btnSpawn');
-  const SPEEDS = [1,2,4];
-
   btnPause.addEventListener('click',()=>{
     paused = !paused;
     if(paused){ pauseStart = performance.now(); }

← 3a5fb88 Add interactive controls (pause/speed/spawn/click-advance) +  ·  back to Agent Abrams Kanban  ·  (newest)