feat(terminology): workplan-first dashboard and retirement backlog (STATE-WP-0069)
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s

Add the ranked legacy-interface backlog (T01), rename dashboard navigation and
user-facing copy to workplan while preserving wire-compat API keys (T02), and
activate the retirement workplan with T01/T02 marked done.
This commit is contained in:
tegwick 2026-07-08 16:08:32 +02:00
parent 4dc69bb8f5
commit b2264d1f06
44 changed files with 382 additions and 253 deletions

View file

@ -23,7 +23,7 @@ import {
const triageState = (async function*() {
let failures = 0;
while (true) {
let events = [], workplanIndex = {workstreams: {}}, ok = false;
let events = [], workplanIndex = {workplans: {}}, ok = false;
try {
const [reportsResp, indexResp] = await Promise.all([
apiFetch("/progress/?event_type=daily_triage&limit=14"),
@ -31,7 +31,7 @@ const triageState = (async function*() {
]);
ok = reportsResp.ok && indexResp.ok;
events = reportsResp.ok ? await reportsResp.json() : [];
workplanIndex = indexResp.ok ? await indexResp.json() : {workstreams: {}};
workplanIndex = indexResp.ok ? await indexResp.json() : {workplans: {}};
} catch {}
failures = ok ? 0 : failures + 1;
yield {events, workplanIndex, ok, ts: new Date()};
@ -42,7 +42,7 @@ const triageState = (async function*() {
```js
const reports = normalizeTriageReports(triageState.events ?? []);
const candidateIndex = buildCandidateIndex(triageState.workplanIndex ?? {workstreams: {}});
const candidateIndex = buildCandidateIndex(triageState.workplanIndex ?? {workplans: {}});
const _ok = triageState.ok ?? false;
const _ts = triageState.ts;
const latestReport = reports[0] ?? null;
@ -140,7 +140,7 @@ function renderPatterns(reports, index) {
${rows.length === 0
? html`<p class="triage-muted">No repeated recommendations are visible in the loaded 14-day window.</p>`
: html`<table class="triage-table">
<thead><tr><th>Workstream</th><th>Times Recommended</th><th>Most Frequent Action</th></tr></thead>
<thead><tr><th>Workplan</th><th>Times Recommended</th><th>Most Frequent Action</th></tr></thead>
<tbody>${rows.map(row => html`<tr>
<td>${candidateNode(row.candidate, index)}</td>
<td>${row.count} / ${Math.max(1, windowReports.length)} reports</td>