diff --git a/automaton/dashboard/html/dashboard.js b/automaton/dashboard/html/dashboard.js
index 306927a..513eca5 100644
--- a/automaton/dashboard/html/dashboard.js
+++ b/automaton/dashboard/html/dashboard.js
@@ -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;
diff --git a/automaton/dashboard/html/index.html b/automaton/dashboard/html/index.html
index 0150437..3d1d366 100644
--- a/automaton/dashboard/html/index.html
+++ b/automaton/dashboard/html/index.html
@@ -44,6 +44,7 @@
+
diff --git a/automaton/dashboard/html/styles.css b/automaton/dashboard/html/styles.css
index 812bf17..c17992b 100644
--- a/automaton/dashboard/html/styles.css
+++ b/automaton/dashboard/html/styles.css
@@ -9,8 +9,8 @@
--error: #f28b82; --error-bg: rgba(242,139,130,0.12);
--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-design: #81c995; --col-test_design: #81c995; --col-implement: #a8dab5;
+ --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;
@@ -32,8 +32,8 @@
--error: #d93025; --error-bg: rgba(217,48,37,0.08);
--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-design: #188038; --col-test_design: #188038; --col-implement: #34a853;
+ --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); }