← back to AbramsEgo
Sessions panel: label firstUser as a 'session opener' transcript snippet (quoted/italic/muted, 140-char truncate, full text on hover) so old pastes can't read as live status
894ff24b30e0bfc8ff730d76dd134612dae85e62 · 2026-07-22 20:51:52 -0700 · Steve
Files touched
Diff
commit 894ff24b30e0bfc8ff730d76dd134612dae85e62
Author: Steve <steve@designerwallcoverings.com>
Date: Wed Jul 22 20:51:52 2026 -0700
Sessions panel: label firstUser as a 'session opener' transcript snippet (quoted/italic/muted, 140-char truncate, full text on hover) so old pastes can't read as live status
---
public/index.html | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/public/index.html b/public/index.html
index 1ff27a9..256f080 100644
--- a/public/index.html
+++ b/public/index.html
@@ -148,6 +148,11 @@
.lrow-top{display:flex;justify-content:space-between;gap:10px;align-items:baseline}
.lrow-when{margin-top:2px}
.when{font-size:9.5px;color:var(--dim);white-space:nowrap}
+ /* historical transcript snippet (session opener) — must NEVER read as live status */
+ .sess-open{margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+ .sess-open-label{font-size:8.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim);
+ border:1px solid var(--line);border-radius:20px;padding:1px 6px;margin-right:6px;vertical-align:1px}
+ .sess-open-quote{font-size:10px;font-style:italic;color:var(--dim)}
/* sort + density control bar shared by every grid/list */
.gridctl{display:flex;gap:12px;align-items:center;margin:0 0 10px;flex-wrap:wrap}
.gridctl select,.gridctl input[type=range]{background:#0c1420;border:1px solid var(--line);color:var(--ink);
@@ -554,8 +559,15 @@ async function load(){
$('wins').innerHTML=(w.recent||[]).map(x=>lrow(esc(x.title),`<span class="dim">${esc(x.project||'')}</span>`,whenChip(x.createdAt,x.date))).join('')||'<span class="muted">no wins logged</span>';
// ---- sessions ----
+ // firstUser is a HISTORICAL transcript snippet (the session's opening paste) —
+ // label it "session opener" + quote/italic/mute + truncate so it can never be
+ // mistaken for a live status card. Full text stays on hover via title=.
+ const sessOpener=(t)=>{ if(!t) return '';
+ const one=String(t).replace(/\s+/g,' ').trim();
+ const cut=one.length>140?one.slice(0,140).replace(/\s+\S*$/,'')+'…':one;
+ return `<div class="sess-open" title="${esc(one)}"><span class="sess-open-label">session opener</span><span class="sess-open-quote">“${esc(cut)}”</span></div>`; };
const ss=(d.sessions&&d.sessions.recent)||[];
- $('sessions').innerHTML=ss.map(x=>lrow(esc(x.title||x.cwd||'session'),`${x.msgCount!=null?x.msgCount+' msg':''}`,whenChip(x.lastTs,x.mtime,x.firstTs))).join('')||'<span class="muted">no sessions</span>';
+ $('sessions').innerHTML=ss.map(x=>lrow(esc(x.cwd||'session'),`${x.msgCount!=null?x.msgCount+' msg':''}`,whenChip(x.lastTs,x.mtime,x.firstTs)+sessOpener(x.firstUser))).join('')||'<span class="muted">no sessions</span>';
// ---- scoreboard (the game-state hero; reuses everything already in d) ----
renderScoreboard(d);
← 57b6bb9 auto-save: 2026-07-22T20:46:37 (1 files) — data/local-fleet.
·
back to AbramsEgo
·
auto-save: 2026-07-22T21:16:47 (1 files) — data/local-fleet. 930cb22 →