Add code_review to dashboard frontend (JS, HTML, CSS)
CI / build (push) Has been cancelled

This commit is contained in:
2026-06-16 12:28:25 -04:00
parent 3d4c0926b4
commit 02c7a4649b
3 changed files with 14 additions and 10 deletions
+8 -6
View File
@@ -12,6 +12,7 @@ const COLUMNS = [
{ id: 'design', label: 'Design', color: 'design' },
{ id: 'test_design', label: 'Test Design', color: 'test_design' },
{ id: 'implement', label: 'Implement', color: 'implement' },
{ id: 'code_review', label: 'Code Review', color: 'code_review' },
{ id: 'bug_find', label: 'Bug Find', color: 'bug_find' },
{ id: 'adv_bug_find', label: 'Adversarial Bug Find', color: 'adv_bug_find' },
{ id: 'doc_review', label: 'Doc Review', color: 'doc_review' },
@@ -28,7 +29,7 @@ const PHASE_GROUPS = [
{ id: 'planning', label: 'Planning', color: '#42a5f5', states: ['backlog', 'research', 'decomposition'] },
{ id: 'design', label: 'Design', color: '#26c6da', states: ['design', 'test_design'] },
{ id: 'implementation', label: 'Implementation', color: '#66bb6a', states: ['implement'] },
{ id: 'verification', label: 'Verification', color: '#ffa726', states: ['bug_find', 'adv_bug_find', 'doc_review', 'referee'] },
{ id: 'verification', label: 'Verification', color: '#ffa726', states: ['code_review', 'bug_find', 'adv_bug_find', 'doc_review', 'referee'] },
{ id: 'blocked', label: 'Blocked', color: '#ef5350', states: ['blocked'] },
{ id: 'resolution', label: 'Resolution', color: '#66bb6a', states: ['done'] },
];
@@ -37,7 +38,7 @@ const PHASE_GROUPS = [
const STATE_ICONS = {
'backlog': '📋', 'research': '🔬', 'decomposition': '🔀',
'design': '🎨', 'test_design': '🧪', 'implement': '⚙️',
'bug_find': '🐛', 'adv_bug_find': '🔍', 'doc_review': '📝',
'code_review': '👁️', 'bug_find': '🐛', 'adv_bug_find': '🔍', 'doc_review': '📝',
'referee': '⚖️', 'done': '✅', 'blocked': '❌'
};
@@ -83,7 +84,7 @@ function renderHeader() {
const doneTasks = document.getElementById('done-tasks');
const blockedTasks = document.getElementById('blocked-tasks');
const filtered = getFilteredTasks();
const wipStates = ['research', 'decomposition', 'design', 'test_design', 'implement', 'bug_find', 'adv_bug_find', 'doc_review', 'referee'];
const wipStates = ['research', 'decomposition', 'design', 'test_design', 'implement', 'code_review', 'bug_find', 'adv_bug_find', 'doc_review', 'referee'];
totalTasks.textContent = filtered.length;
wipTasks.textContent = filtered.filter(t => wipStates.includes(t.state)).length;
doneTasks.textContent = filtered.filter(t => t.state === 'done').length;
@@ -152,7 +153,8 @@ function renderBoard() {
const ARTIFACT_LABELS = {
'research': 'SPEC.md', 'decomposition': 'DECOMPOSITION.md',
'design': 'DESIGN.md', 'test_design': 'TEST_PLAN.md',
'implement': 'IMPLEMENTATION.md', 'bug_find': 'BUG_REPORT.md',
'implement': 'IMPLEMENTATION.md', 'code_review': 'CODE_REVIEW.md',
'bug_find': 'BUG_REPORT.md',
'adv_bug_find': 'ADVERSARIAL_BUG_REPORT.md', 'doc_review': 'DOC_REVIEW.md',
'referee': 'VERDICT.md',
};
@@ -258,9 +260,9 @@ function closeDetail() {
function renderStats() {
const panel = document.getElementById('stats-panel');
const filtered = getFilteredTasks();
const wipStates = ['research', 'decomposition', 'design', 'test_design', 'implement', 'bug_find', 'adv_bug_find', 'doc_review', 'referee'];
const wipStates2 = ['research', 'decomposition', 'design', 'test_design', 'implement', 'code_review', 'bug_find', 'adv_bug_find', 'doc_review', 'referee'];
const total = filtered.length;
const wip = filtered.filter(t => wipStates.includes(t.state)).length;
const wip = filtered.filter(t => wipStates2.includes(t.state)).length;
const done = filtered.filter(t => t.state === 'done').length;
const blocked = filtered.filter(t => t.state === 'blocked').length;
+1
View File
@@ -44,6 +44,7 @@
<option value="research">Research</option>
<option value="design">Design</option>
<option value="implement">Implement</option>
<option value="code_review">Code Review</option>
<option value="bug_find">Bug Find</option>
<option value="done">Done</option>
<option value="blocked">Blocked</option>
+3 -2
View File
@@ -10,7 +10,7 @@
--info: #8ab4f8; --info-bg: rgba(138,180,248,0.12);
--col-backlog: #9aa0a6; --col-research: #8ab4f8; --col-decomposition: #c7b8d9;
--col-design: #81c995; --col-test_design: #81c995; --col-implement: #a8dab5;
--col-bug_find: #fdd663; --col-adv_bug_find: #f28b82; --col-doc_review: #fde293;
--col-code_review: #80cbc4; --col-bug_find: #fdd663; --col-adv_bug_find: #f28b82; --col-doc_review: #fde293;
--col-referee: #c7b8d9; --col-done: #a8dab5; --col-blocked: #f28b82;
--radius-sm: 8px; --radius-md: 12px; --radius-lg: 16px;
--elevation-0: none;
@@ -33,7 +33,7 @@
--info: #1a73e8; --info-bg: rgba(26,115,232,0.08);
--col-backlog: #5f6368; --col-research: #1a73e8; --col-decomposition: #9334e6;
--col-design: #188038; --col-test_design: #188038; --col-implement: #34a853;
--col-bug_find: #ea8600; --col-adv_bug_find: #d93025; --col-doc_review: #f9ab00;
--col-code_review: #00897b; --col-bug_find: #ea8600; --col-adv_bug_find: #d93025; --col-doc_review: #f9ab00;
--col-referee: #9334e6; --col-done: #34a853; --col-blocked: #d93025;
--elevation-0: none;
--elevation-1: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.04);
@@ -131,6 +131,7 @@ body {
.column-header[data-color="design"] { color: var(--col-design); }
.column-header[data-color="test_design"] { color: var(--col-design); }
.column-header[data-color="implement"] { color: var(--col-implement); }
.column-header[data-color="code_review"] { color: var(--col-code_review); }
.column-header[data-color="bug_find"] { color: var(--col-bug_find); }
.column-header[data-color="adv_bug_find"] { color: var(--col-adv_bug_find); }
.column-header[data-color="doc_review"] { color: var(--col-doc_review); }