fix: customer-based board visibility, chat widget UX, atomized Subdivide, static cache-busting

- Board visibility (§4.4): developers now see tasks for any customer with a
  consultant who pooled them, not only tasks whose consultantId is in their
  pool. Fixes a published task being invisible to its own author who is both
  consultant and developer. Adds TestBoardVisibilityIsCustomerBased.
- Chat widget: working ✕ close, distinct (non-ghost) header buttons, reliable
  conversation switching, ← Back, title ellipsis.
- Atomization: atomized/imported subtasks now expose a Subdivide button.
- Static assets: serve with ETag + Cache-Control: no-cache so JS/CSS fixes
  reach clients immediately instead of being masked by stale max-age caching.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
etalon
2026-06-13 10:20:06 +02:00
parent c59aea42ef
commit 05dc91410f
6 changed files with 152 additions and 50 deletions
+5 -5
View File
@@ -25,13 +25,13 @@ if (document.body.dataset.loggedIn === '1' && location.pathname !== '/messages')
panel.hidden = true;
panel.innerHTML = `
<header>
<span style="display:flex;align-items:center;gap:8px">
<button class="btn small ghost" id="cw-back" hidden aria-label="Back to conversations">←</button>
<span style="display:flex;align-items:center;gap:8px;min-width:0">
<button class="btn small" id="cw-back" hidden aria-label="Back to conversations">← Back</button>
<strong id="cw-title">Messages</strong>
</span>
<span>
<a class="btn small ghost" id="cw-full" href="/messages" aria-label="Open full messages">⤢</a>
<button class="btn small ghost" id="cw-close" aria-label="Close">×</button>
<span style="display:flex;gap:6px">
<a class="btn small" id="cw-full" href="/messages" aria-label="Open full messages" title="Open full messages">⤢</a>
<button class="btn small" id="cw-close" aria-label="Close" title="Close">✕</button>
</span>
</header>
<div class="cw-body" id="cw-body"></div>