docs(design): handoff package for implementing the design
Jason accepted the draft 1 direction on 2026-10-10; the refined Relay mark stays as a placeholder. Adds IMPLEMENTING.md (gap map against row 40 and the bus/CLI modules, strings, boundaries, acceptance, proposed rows for Sage), tokens.json and generated tokens.css using the webui's existing names, icons.svg, and tools/build-tokens.mjs and tools/check-design.mjs. Coverage statuses corrected against the code (digest implemented; mosaic stop is row 41; priority and agent state not in the bus reads). No packages/ change. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
@@ -847,7 +847,7 @@ agents(){
|
||||
return vh("Agents","Role instances, who holds each one, and the launch budget.", `<span class="st implemented">implemented</span>`) + stateBanner() +
|
||||
`<div class="cards"><div class="card"><span class="label">Opus sessions</span><div class="big tnum">2 <span class="note">of 4</span></div><div class="meter" aria-hidden="true"><i class="on"></i><i class="on"></i><i></i><i></i></div></div>
|
||||
<div class="card"><span class="label">Sonnet sessions</span><div class="big tnum">1 <span class="note">of 4</span></div><div class="meter" aria-hidden="true"><i class="on"></i><i></i><i></i><i></i></div></div>
|
||||
<div class="card"><span class="label">Launching</span><div class="big" style="color:var(--success)">allowed</div><div class="note">Stop all launches with <code>mosaic stop</code> <span class="st planned">planned</span></div></div></div>
|
||||
<div class="card"><span class="label">Launching</span><div class="big" style="color:var(--success)">allowed</div><div class="note">Stop all launches with <code>mosaic stop</code> <span class="st progress">in progress</span></div></div></div>
|
||||
<div class="tbl"><table><thead><tr><th>Role</th><th>Holder</th><th>Harness</th><th>State</th><th>Attention</th><th>Held for</th><th>Run</th></tr></thead><tbody>${body(rows,7,"<b>No role is claimed</b>The PM launches role sessions within the business file's limits.")}</tbody></table></div>
|
||||
<div class="section"><h3>Role credentials</h3><p class="note" style="margin-bottom:8px">Metadata only. Values and file paths are never shown; the broker alone reads them.</p>
|
||||
<div class="tbl"><table><thead><tr><th>Service</th><th>Account</th><th>Role</th><th>Status</th></tr></thead><tbody>${body(creds.map(([s,a,r,x,c])=>`<tr><td>${s}</td><td class="mono">${a}</td><td>${r}</td><td>${c?`<span class="chip ${c==="bad"?"gated":"warn"}">${x}</span>`:x}</td></tr>`).join(""),4,"<b>No credentials declared</b>")}</tbody></table></div></div>`;
|
||||
@@ -907,7 +907,7 @@ settings(){
|
||||
<div class="seg" role="group" aria-label="Mode">${["system","light","dim","dark"].map(m=>`<button data-setmode="${m}" aria-pressed="${theme.mode===m}">${m[0].toUpperCase()+m.slice(1)}</button>`).join("")}</div></div>
|
||||
<div class="panel stack"><h3 class="h2" style="font-size:16px">Notifications</h3>
|
||||
<dl class="kv"><dt>Blocking gated</dt><dd>CLI inbox and a Discord DM, right away</dd><dt>Everything else</dt><dd>One digest at 08:00 America/Chicago</dd><dt>Discord</dt><dd>connector #1509 · DM to you only</dd></dl>
|
||||
<p class="note">Set in the business variables. <span class="st implemented">implemented</span> DM · <span class="st planned">planned</span> digest</p>
|
||||
<p class="note">Set in the business variables. <span class="st implemented">implemented</span> DM and digest</p>
|
||||
<h3 class="h2" style="font-size:16px;margin-top:8px">About</h3>
|
||||
<dl class="kv"><dt>Release</dt><dd class="mono">0.0.12</dd><dt>WebUI</dt><dd class="mono">127.0.0.1:7330 · loopback only</dd><dt>Control board</dt><dd class="mono">127.0.0.1:7331</dd><dt>Sign-in</dt><dd>None in v1; localhost only, no SSO</dd><dt>System config</dt><dd class="mono">~/.config/mosaic-dev/config.json</dd></dl></div></div>`;
|
||||
},
|
||||
@@ -1271,7 +1271,7 @@ agents(){
|
||||
" vikunja bot-mosaic-stack-sync sync, read-only {w|expires 2026-10-21 · 12 days}",
|
||||
" vikunja bot-mosaic-stack-coder coder {d|not configured}",
|
||||
"",
|
||||
" {m|Stop every launch with} {b|mosaic stop} {m|(planned). Restoring launches is logged as launch.restored.}"
|
||||
" {m|Stop every launch with} {b|mosaic stop} {m|(row 41). Restoring launches is logged as launch.restored.}"
|
||||
];
|
||||
return frame("Agents", body, [" {m|3 roles held · 1 free · 0 revoked}", " {m|> (Tab to type to the PM)}", HINT_NAV]);
|
||||
},
|
||||
@@ -1408,19 +1408,21 @@ const COV = [
|
||||
["Outcome unknown, no retry","bus","toast + trail","outcome-unknown box","implemented",""],
|
||||
["Refused inside an agent run (exit 3)","REQ-DEC-3","n/a","shell","implemented",""],
|
||||
["Blocking decisions: Discord DM","REQ-DEC-4, #1509","Settings › Notifications","Inbox footer","implemented",""],
|
||||
["Daily digest 08:00 Central","REQ-DEC-4","Board card, Settings","Inbox footer","planned",""],
|
||||
["Mark decision seen","bus decision ops","Inspector button","s in Inbox","proposed","Seen is not resolution"],
|
||||
["Tasks list, buckets, priority, requirement","REQ-TASK-1","Tasks","Tasks (t)","implemented",""],
|
||||
["Daily digest 08:00 Central","REQ-DEC-4","Board card, Settings","Inbox footer","implemented","packages/cli notifier; runs while the bus host runs"],
|
||||
["Mark decision seen","bus decision ops","Inspector button","s in Inbox","proposed","Broker op decision.seen exists (human session); no CLI or web caller. Seen is not resolution"],
|
||||
["Tasks list and buckets","REQ-TASK-1","Tasks","Tasks (t)","implemented",""],
|
||||
["Task priority and requirement columns","REQ-TASK-1","Tasks","Tasks (t)","proposed","Not in the bus tasks read; requirement is in the task.created event"],
|
||||
["Task markers (changed, not created, conflict, missing)","REQ-TASK-1, -2","Tasks + inspector","Tasks","implemented",""],
|
||||
["Freshness: Vikunja last read","REQ-TASK-2","command bar, Tasks","Tasks header","implemented",""],
|
||||
["Field writers per task","REQ-TASK-1","Task inspector","Tasks detail","proposed","From the slice 1 field table"],
|
||||
["Agents: role holders and state","REQ-ROLE-2, REQ-CLI-1","Agents","Agents (a)","implemented",""],
|
||||
["Agents: role holders","REQ-ROLE-2, REQ-CLI-1","Agents","Agents (a)","implemented",""],
|
||||
["Agent state and Input needed per role","REQ-ROLE-2","Agents","Agents (a)","proposed","The control board has state per seat; the bus agents read has none"],
|
||||
["Launch budget: Opus n of 4, Sonnet n of 4","REQ-LAUNCH-1","Agents, Board","Agents","progress","row 41"],
|
||||
["Revoke launches in one word","REQ-LAUNCH-1","Agents card","mosaic stop","planned",""],
|
||||
["Revoke launches in one word","REQ-LAUNCH-1","Agents card","mosaic stop","progress","row 41; broker launch.revoke exists, no CLI verb yet"],
|
||||
["Revoke a stuck holder (gated)","REQ-ROLE-2","Role inspector → Inbox","Agents → Inbox","implemented","role.revoke is always gated"],
|
||||
["Credential metadata and expiry","REQ-CRED-1","Agents, Settings","Agents","proposed","Names and dates only"],
|
||||
["Credential metadata and expiry","REQ-CRED-1","Agents, Settings","Agents","proposed","Names and dates only; Credentials.status() exists but the broker does not expose it"],
|
||||
["Trail of a task or decision","REQ-EVT-1, REQ-CLI-1","Trail","Trail (r)","implemented",""],
|
||||
["Trail filter chips","slice 1 S5","Trail","Trail","progress","row 40"],
|
||||
["Trail filter chips","slice 1 S5","Trail","Trail","implemented","Row 40: All, Requests, Decisions, Launches, Task changes, Review"],
|
||||
["Control board: seat states, Input needed, Seen/Unsee","control-board","Board (home)","—","implemented","Port 7331 today; joins the console"],
|
||||
["Command palette Ctrl+K","D-002","everywhere",": command line","proposed",""],
|
||||
["Business file: roles, arbiters, limits","REQ-ROLE-3, -4","Business","—","planned","Read-only view"],
|
||||
|
||||
Reference in New Issue
Block a user