diff --git a/automaton/dashboard/html/dashboard.js b/automaton/dashboard/html/dashboard.js
index b146206..4d9a641 100644
--- a/automaton/dashboard/html/dashboard.js
+++ b/automaton/dashboard/html/dashboard.js
@@ -205,6 +205,7 @@ function renderDetail(task) {
Review
${reviewStatusText}
${reviewComment}
+
@@ -333,8 +334,8 @@ function renderTimeline() {
}
async function submitReview(taskName, status) {
- const comment = prompt(status === 'changes_requested' ? 'Describe what changes are needed:' : 'Optional approval comment:');
- if (comment === null) return;
+ const textarea = document.getElementById(`review-comment-${taskName}`);
+ const comment = textarea ? textarea.value : '';
try {
const res = await fetch(`/api/task/${taskName}/review`, {
method: 'POST',
@@ -343,11 +344,8 @@ async function submitReview(taskName, status) {
});
const data = await res.json();
if (data.success) {
+ closeDetail();
await refreshData();
- const task = state.tasks.find(t => t.name === taskName);
- if (task && task.name === (state.selectedTask && state.selectedTask.name)) {
- renderDetail(task);
- }
}
} catch (err) {
console.error('Review submission failed:', err);
diff --git a/automaton/dashboard/html/styles.css b/automaton/dashboard/html/styles.css
index b3b9914..56a0109 100644
--- a/automaton/dashboard/html/styles.css
+++ b/automaton/dashboard/html/styles.css
@@ -252,6 +252,8 @@ kbd {
.review-btn.changes { border-color: var(--error); color: var(--error); }
.review-btn.changes:hover { background: var(--error-bg); }
.review-comment { font-size: 12px; color: var(--text-secondary); padding: 8px; background: var(--bg-primary); border-radius: 4px; margin-top: 4px; }
+.review-textarea { width: 100%; margin-top: 8px; padding: 8px; background: var(--bg-primary); border: 1px solid var(--border-color); border-radius: 6px; color: var(--text-primary); font-size: 12px; font-family: inherit; resize: vertical; }
+.review-textarea:focus { outline: none; border-color: var(--accent); }
.task-card-artifacts { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; }
.artifact-badge { font-size: 10px; padding: 1px 6px; background: var(--bg-primary); border: 1px solid var(--border-color); border-radius: 3px; color: var(--text-secondary); font-family: monospace; }
diff --git a/tasks/additive-extension-model/REVIEW.md b/tasks/additive-extension-model/REVIEW.md
new file mode 100644
index 0000000..b644d8d
--- /dev/null
+++ b/tasks/additive-extension-model/REVIEW.md
@@ -0,0 +1,3 @@
+# Review
+- **Status**: approved
+- **Timestamp**: 2026-06-13T18:00:41.433151
diff --git a/tasks/artifact-badges/REVIEW.md b/tasks/artifact-badges/REVIEW.md
new file mode 100644
index 0000000..43b2356
--- /dev/null
+++ b/tasks/artifact-badges/REVIEW.md
@@ -0,0 +1,3 @@
+# Review
+- **Status**: approved
+- **Timestamp**: 2026-06-13T18:00:48.191824
diff --git a/tasks/changelog/REVIEW.md b/tasks/changelog/REVIEW.md
new file mode 100644
index 0000000..12d8da2
--- /dev/null
+++ b/tasks/changelog/REVIEW.md
@@ -0,0 +1,3 @@
+# Review
+- **Status**: approved
+- **Timestamp**: 2026-06-13T18:00:58.458316
diff --git a/tasks/dashboard-task-review/REVIEW.md b/tasks/dashboard-task-review/REVIEW.md
new file mode 100644
index 0000000..d2549bd
--- /dev/null
+++ b/tasks/dashboard-task-review/REVIEW.md
@@ -0,0 +1,3 @@
+# Review
+- **Status**: approved
+- **Timestamp**: 2026-06-13T18:01:27.011077
diff --git a/tasks/review-textarea/SPEC.md b/tasks/review-textarea/SPEC.md
new file mode 100644
index 0000000..de397e8
--- /dev/null
+++ b/tasks/review-textarea/SPEC.md
@@ -0,0 +1,28 @@
+# SPEC: Replace Prompt Dialog with Inline Comment Textarea
+
+## Overview
+
+The review approval flow uses `prompt()` for comments, which is a jarring browser popup. Replace it with a textarea in the detail modal. After submission, close the modal and return to the board.
+
+## Changes
+
+### dashboard.js
+- Add comment `