generated from coulomb/repo-seed
Add WSJF triage dashboard review page
This commit is contained in:
117
dashboard/test/wsjf-triage.test.mjs
Normal file
117
dashboard/test/wsjf-triage.test.mjs
Normal file
@@ -0,0 +1,117 @@
|
||||
import assert from "node:assert/strict";
|
||||
import test from "node:test";
|
||||
|
||||
import {
|
||||
buildCandidateIndex,
|
||||
buildPatternRows,
|
||||
candidateKeysForWorkplan,
|
||||
formatActionCount,
|
||||
normalizeTriageReports,
|
||||
resolveCandidate,
|
||||
topAction,
|
||||
truncateSummary,
|
||||
} from "../src/components/wsjf-triage.js";
|
||||
|
||||
test("candidate keys resolve workplan ids and filename slugs", () => {
|
||||
assert.deepEqual(
|
||||
candidateKeysForWorkplan({filename: "CUST-WP-0003-whi-kpi-card.md"}).sort(),
|
||||
["cust-wp-0003", "cust-wp-0003-whi-kpi-card", "whi-kpi-card"],
|
||||
);
|
||||
assert.deepEqual(
|
||||
candidateKeysForWorkplan({filename: "260501-CUST-WP-0028-e2e-sandbox-framework.md"}).sort(),
|
||||
["cust-wp-0028", "cust-wp-0028-e2e-sandbox-framework", "e2e-sandbox-framework"],
|
||||
);
|
||||
});
|
||||
|
||||
test("candidate index resolves daily report candidates to workstream ids", () => {
|
||||
const index = buildCandidateIndex({
|
||||
workstreams: {
|
||||
"d9d9a3ec-f736-4041-beac-bb92c7ad314e": {
|
||||
filename: "CUST-WP-0045-activity-core-daily-triage-runner.md",
|
||||
},
|
||||
"9cc32158-2f5c-4ef6-9713-aacce4623d5e": {
|
||||
filename: "CUST-WP-0003-whi-kpi-card.md",
|
||||
},
|
||||
"36162ff0-9b47-47c4-8602-56767f9b7a1c": {
|
||||
filename: "ADHOC-2026-06-01.md",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.equal(resolveCandidate("cust-wp-0045", index).id, "d9d9a3ec-f736-4041-beac-bb92c7ad314e");
|
||||
assert.equal(resolveCandidate("whi-kpi-card", index).id, "9cc32158-2f5c-4ef6-9713-aacce4623d5e");
|
||||
assert.equal(resolveCandidate("adhoc-2026-06-01", index).id, "36162ff0-9b47-47c4-8602-56767f9b7a1c");
|
||||
assert.equal(resolveCandidate("missing-wp-0001", index), null);
|
||||
});
|
||||
|
||||
test("triage events normalize reports and action summaries", () => {
|
||||
const [report] = normalizeTriageReports([
|
||||
{
|
||||
id: "935244fa-b438-488c-a11a-42e1a84e3d59",
|
||||
summary: "event summary",
|
||||
created_at: "2026-06-02T12:52:14.460214Z",
|
||||
author: "activity-core",
|
||||
detail: {
|
||||
scheduled_for: "2026-06-02T12:52:01.690214+00:00",
|
||||
instruction_id: "daily-triage-report",
|
||||
activity_core_run_id: "f9b97749-c1d0-5746-ab18-89932bef47c1",
|
||||
report: {
|
||||
summary: "daily summary",
|
||||
recommendations: [
|
||||
{candidate: "cust-wp-0045", action: "work-next", confidence: "high", why: "runner"},
|
||||
{candidate: "cust-wp-0046", action: "needs-human", confidence: "high", why: "blocked"},
|
||||
{candidate: "whi-kpi-card", action: "work-next", confidence: "medium", why: "health"},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
assert.equal(report.summary, "daily summary");
|
||||
assert.equal(report.date, "2026-06-02");
|
||||
assert.equal(report.recommendations.length, 3);
|
||||
assert.equal(report.memory_path, "the-custodian/memory/working/daily-triage-2026-06-02-f9b97749.md");
|
||||
assert.deepEqual(topAction(report.recommendations), {action: "work-next", count: 2});
|
||||
assert.equal(formatActionCount(topAction(report.recommendations)), "work-next x2");
|
||||
});
|
||||
|
||||
test("pattern rows aggregate repeated candidates by action", () => {
|
||||
const reports = normalizeTriageReports([
|
||||
{
|
||||
id: "one",
|
||||
created_at: "2026-06-03T06:00:00Z",
|
||||
detail: {
|
||||
report: {
|
||||
recommendations: [
|
||||
{candidate: "cust-wp-0046", action: "needs-human"},
|
||||
{candidate: "cust-wp-0045", action: "work-next"},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "two",
|
||||
created_at: "2026-06-02T06:00:00Z",
|
||||
detail: {
|
||||
report: {
|
||||
recommendations: [
|
||||
{candidate: "cust-wp-0046", action: "needs-human"},
|
||||
{candidate: "cust-wp-0046", action: "revisit"},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
const [first, second] = buildPatternRows(reports);
|
||||
assert.equal(first.candidateKey, "cust-wp-0046");
|
||||
assert.equal(first.count, 3);
|
||||
assert.equal(first.action, "needs-human");
|
||||
assert.equal(first.actionCount, 2);
|
||||
assert.equal(second.candidateKey, "cust-wp-0045");
|
||||
});
|
||||
|
||||
test("summary truncation keeps compact table rows", () => {
|
||||
assert.equal(truncateSummary("short", 120), "short");
|
||||
assert.equal(truncateSummary("abcdefghijklmnopqrstuvwxyz", 10), "abcdefg...");
|
||||
});
|
||||
Reference in New Issue
Block a user