M4: presentational review recap

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-05-31 21:13:04 -04:00
parent f5da12362a
commit 51cb09c520
+12 -1
View File
@@ -50,6 +50,16 @@ function evidenceBlock(ev) {
</div>`; </div>`;
} }
// reviewSummary renders a presentational recap from already-available state:
// the commitment plus the per-window evidence buckets. No new backend data.
function reviewSummary(ev) {
if (!ev) return '';
const rows = (ev.buckets || []).map(b =>
`<div class="summary-row"><span>${(b.class || '?')} · ${b.title || ''}</span><span>${fmt(b.seconds)}</span></div>`).join('');
const switches = `<div class="summary-row"><span>context switches</span><span>${ev.switch_count || 0}</span></div>`;
return `<div class="band summary">${switches}${rows}</div>`;
}
// updateActiveDrift owns the active status band: it renders on-task, nudge, // updateActiveDrift owns the active status band: it renders on-task, nudge,
// drift, or pending content into #statusband and rebinds the buttons. // drift, or pending content into #statusband and rebinds the buttons.
function updateActiveDrift(state) { function updateActiveDrift(state) {
@@ -204,8 +214,9 @@ function render(state) {
<div class="band"> <div class="band">
<div class="action">Session ended</div> <div class="action">Session ended</div>
<p class="meta">${c.next_action || ''}</p> <p class="meta">${c.next_action || ''}</p>
<p class="meta">done when: ${c.success_condition || ''}</p>
</div> </div>
${evidenceBlock(state.evidence)} ${reviewSummary(state.evidence)}
<div class="band"><button id="end" class="btn btn-primary">End</button></div>`; <div class="band"><button id="end" class="btn btn-primary">End</button></div>`;
document.getElementById('end').onclick = () => post('/end'); document.getElementById('end').onclick = () => post('/end');