diff --git a/.rules.md b/.rules.md index 402d93b..9a9705a 100644 --- a/.rules.md +++ b/.rules.md @@ -50,3 +50,17 @@ - Write task artifacts atomically to avoid partial reads by the dashboard or other agents - Prefer writing to a temporary file and renaming it into place - Avoid leaving empty or malformed artifacts in the task folder + +## Self-Documenting UI Names +- All user-facing labels must be self-documenting and free of internal jargon +- A user should understand what something is without knowing the codebase internals +- Terms like "tick", "loop", "state", or "phase transition" are internal terminology — never use them directly in UI elements +- Pick names that describe what something *does*, not what it's called in code +- Past failure (1): "Loop Tick" in the Background tab — user asked "What is loop tick?" because it's scheduler jargon +- Past failure (2): "Loop" — still too vague, user said "I don't know what the loop is" +- Past failure (3): "Loop Agent" — user asked "How do I differentiate between agents with different roles?" because the name described the mechanism (loop) not the purpose +- Past failure (4): "Background" tab — the tab name described the *location* (background), not the *content* (agents). Renamed to "Agent" tab. +- Past failure (5): Group headers + agent type pill badge + icon + name all repeated the same info ("🧹 Cleanup" seen 3 times per card). Removed group headers and pill badges — only icon + name on each card. +- Past failure (6): "Cleanup" agent was vague — renamed to "Completed Task Archiver" which describes what it actually does. +- Rule: Every agent type must have a self-documenting name ending with its function (e.g., "Archiver", "Scanner", "Processor"). If multiple instances exist, list each instance card. +- Agent types with no active instances render as dimmed placeholder cards rather than being hidden, so the user always sees the full roster of available agents. diff --git a/automaton/dashboard/config.py b/automaton/dashboard/config.py index b3a3633..2decc78 100644 --- a/automaton/dashboard/config.py +++ b/automaton/dashboard/config.py @@ -13,7 +13,7 @@ DEFAULTS = { "theme": "default", } -VALID_VIEWS = {"board", "statistics", "timeline"} +VALID_VIEWS = {"board", "statistics", "timeline", "agent"} VALID_THEMES = {"default", "dark", "light"} diff --git a/automaton/dashboard/core/task.py b/automaton/dashboard/core/task.py index 7982849..323e76e 100644 --- a/automaton/dashboard/core/task.py +++ b/automaton/dashboard/core/task.py @@ -648,6 +648,8 @@ def discover_tasks(tasks_dir: Path) -> list[Task]: continue if folder_path.name == "subtasks": continue + if folder_path.name == "complete": + continue if not _VALID_TASK_NAME_CHARS.issuperset(set(folder_path.name)): continue diff --git a/automaton/dashboard/html/dashboard.js b/automaton/dashboard/html/dashboard.js index 513eca5..9cd7fb8 100644 --- a/automaton/dashboard/html/dashboard.js +++ b/automaton/dashboard/html/dashboard.js @@ -327,51 +327,196 @@ function renderStats() { ${waveStats.length > 0 ? `

Wave Progress

${waveHtml}
` : ''}`; } -function renderTimeline() { - const panel = document.getElementById('timeline-panel'); - const filtered = getFilteredTasks(); +const AGENT_TYPE_META = { + completed_task_archiver: { icon: '🧹', label: 'Completed Task Archiver', color: '#9aa0a6', desc: 'Archives completed tasks older than a threshold' }, + single: { icon: '🎯', label: 'Dedicated Agent', color: '#42a5f5', desc: 'Works on a single assigned task' }, + audit: { icon: '🔍', label: 'Audit Scanner', color: '#ffa726', desc: 'Scans for violations and creates remediation tasks' }, + backlog: { icon: '📋', label: 'Backlog Processor', color: '#66bb6a', desc: 'Processes items from a backlog queue' }, +}; - // Group phases by phase group - const phaseGroupStates = {}; - PHASE_GROUPS.forEach(group => { - phaseGroupStates[group.id] = { - states: group.states, - label: group.label, - color: group.color, - }; +const AGENT_TYPES = Object.keys(AGENT_TYPE_META); +const AGENT_TYPE_META_FALLBACK = { icon: '🤖', label: 'Agent', color: '#8ab4f8', desc: '' }; + +async function fetchSchedule() { + try { + const res = await fetch('/api/scheduled'); + const data = await res.json(); + return data; + } catch (err) { + console.error('Failed to fetch scheduled jobs:', err); + return { jobs: [], available: false }; + } +} + +function _resolveAgentType(job) { + if (job.kind === 'cleanup' || !job.agent_type) return 'completed_task_archiver'; + return job.agent_type; +} + +function _scheduledStatusBadge(status) { + const map = { + enabled: { text: 'Enabled', cls: 'ok' }, + disabled: { text: 'Disabled', cls: 'muted' }, + misconfigured: { text: 'Misconfigured', cls: 'bad' }, + }; + const m = map[status] || { text: status || 'Unknown', cls: 'muted' }; + return `${m.text}`; +} + +function _renderRuntimeState(rt) { + if (!rt) return ''; + const rows = []; + if (rt.status) rows.push(['status', rt.status]); + if (rt.iteration_count !== undefined && rt.iteration_count !== null) + rows.push(['iterations', rt.iteration_count]); + if (rt.halt_reason) rows.push(['halt_reason', rt.halt_reason]); + if (rt.current_task) rows.push(['current_task', rt.current_task]); + if (Array.isArray(rt.score_history) && rt.score_history.length) + rows.push(['scores', rt.score_history.join(', ')]); + if (rt.resumed_count) rows.push(['resumed_count', rt.resumed_count]); + if (!rows.length) return ''; + return `
Runtime State
${rows.map(r => + `
${r[0]}
${r[1]}
`).join('')}
`; +} + +function _agentRuntimeIndicator(rt) { + if (!rt || !rt.status) return ''; + const map = { + running: { icon: '▶', cls: 'ok' }, + halted: { icon: '⏹', cls: 'bad' }, + paused: { icon: '⏸', cls: 'muted' }, + complete: { icon: '✓', cls: 'ok' }, + }; + const m = map[rt.status] || { icon: '○', cls: 'muted' }; + return `${m.icon} ${rt.status}`; +} + +function _agentJobKey(job) { + return (job.kind || 'unknown') + ':' + (job.name || 'default'); +} + +function _renderAgentCard(meta, job) { + const key = _agentJobKey(job); + const name = job.name || meta.label; + const interval = job.next_run_seconds + ? `Every ${Math.round(job.next_run_seconds / 3600)}h` : '—'; + const stub = job.stub_path + ? `
stub
${job.stub_path}
` + : ''; + const runtimeHtml = _renderRuntimeState(job.runtime_state); + const agentRuntime = _agentRuntimeIndicator(job.runtime_state); + const statusBorderCls = job.status === 'enabled' ? 'ok' : job.status === 'misconfigured' ? 'bad' : 'muted'; + return `
+
+
+ ${meta.icon} ${name} + ${agentRuntime} + ${_scheduledStatusBadge(job.status)} +
+
+
+
schedule
${interval}
+ ${stub} +
+
${runtimeHtml}
+
`; +} + +function _renderInactiveCard(meta) { + return `
+
+
+ ${meta.icon} ${meta.label} + Not Installed +
+
+ ${meta.desc ? `
${meta.desc}
` : ''} +
`; +} + +async function _agentPollerTick() { + const data = await fetchSchedule(); + if (!data || !data.jobs) return; + for (const job of data.jobs) { + const key = _agentJobKey(job); + const card = document.querySelector(`[data-agent-card="${key}"]`); + if (!card) continue; + // Update status badge text + class + const badge = card.querySelector('[data-agent-field="status-badge"] .bg-status'); + if (badge) { + const map = { enabled: 'Enabled', disabled: 'Disabled', misconfigured: 'Misconfigured' }; + badge.textContent = map[job.status] || job.status || 'Unknown'; + badge.className = `bg-status bg-status-${ + job.status === 'enabled' ? 'ok' : job.status === 'misconfigured' ? 'bad' : 'muted' + }`; + } + // Update runtime indicator + const rtIndicator = card.querySelector('[data-agent-field="rt-indicator"]'); + if (rtIndicator) { + rtIndicator.innerHTML = _agentRuntimeIndicator(job.runtime_state); + } + // Update runtime state section + const rtSection = card.querySelector('[data-agent-field="runtime-state"]'); + if (rtSection) { + rtSection.innerHTML = _renderRuntimeState(job.runtime_state); + } + // Update card border + const borderCls = job.status === 'enabled' ? 'ok' : job.status === 'misconfigured' ? 'bad' : 'muted'; + card.className = card.className.replace(/bg-status-\w+/g, `bg-status-${borderCls}`); + } +} + +let _agentPoller = null; +const AGENT_POLL_INTERVAL = 5000; + +function _stopAgentPoller() { + if (_agentPoller) { + clearInterval(_agentPoller); + _agentPoller = null; + } +} + +function _startAgentPoller() { + _stopAgentPoller(); + _agentPoller = setInterval(_agentPollerTick, AGENT_POLL_INTERVAL); +} + +async function renderAgentTab() { + const panel = document.getElementById('agent-panel'); + if (!panel) return; + // If poller is already running, do a targeted update instead of full rebuild + if (_agentPoller) { + await _agentPollerTick(); + return; + } + panel.innerHTML = '
Loading agents…
'; + const data = await fetchSchedule(); + const jobs = data.jobs || []; + if (data.available === false) { + panel.innerHTML = '
No agents available (not running from ~/.automaton).
'; + return; + } + if (data.error) { + panel.innerHTML = `
Error: ${data.error}
`; + return; + } + // Group jobs by agent type + const groups = {}; + jobs.forEach(j => { + const key = _resolveAgentType(j); + (groups[key] = groups[key] || []).push(j); }); - - // Legend: show phase groups - const legend = PHASE_GROUPS.map(group => { - return `
${group.label}
`; + // Render a card for each agent type — active instances or placeholder + const cardsHtml = AGENT_TYPES.map(key => { + const meta = AGENT_TYPE_META[key]; + const typeJobs = groups[key]; + if (!typeJobs || typeJobs.length === 0) { + return _renderInactiveCard(meta); + } + return typeJobs.map(job => _renderAgentCard(meta, job)).join(''); }).join(''); - - const itemsHtml = filtered.map(task => { - // For each phase group, check if the task has completed any state in that group - const phaseGroupHtml = PHASE_GROUPS.map(group => { - const groupStates = group.states; - const hasArtifact = groupStates.some(s => task.artifacts[s]); - const isComplete = task.state === 'done' || hasArtifact; - const isCurrent = groupStates.includes(task.state) && !hasArtifact; - const cls = isComplete ? 'complete' : isCurrent ? 'in_progress' : 'incomplete'; - const icon = isComplete ? '✓' : isCurrent ? '◐' : '○'; - return `
${icon}
`; - }).join(''); - const statusClass = task.state === 'done' ? 'done' : task.state === 'blocked' ? 'blocked' : 'in_progress'; - const statusIcon = task.state === 'done' ? '✅' : task.state === 'blocked' ? '❌' : '🔄'; - const waveHtml = task.sub_tasks.length > 0 - ? `
Sub-tasks (${task.sub_tasks.filter(st => st.has_verdict).length}/${task.sub_tasks.length})
-
${task.sub_tasks.map(st => { - const stStatus = st.has_verdict && st.verdict_status === 'PASS' ? 'pass' : st.has_verdict && st.verdict_status === 'FAIL' ? 'fail' : 'incomplete'; - const stIcon = stStatus === 'pass' ? '✓' : stStatus === 'fail' ? '✗' : '○'; - return `
${stIcon}${st.name}
`; - }).join('')}
` - : ''; - return `
-
${task.display_name}${statusIcon}
-
${phaseGroupHtml}
${waveHtml}
`; - }).join(''); - panel.innerHTML = `

Phase Legend:

${legend}
${itemsHtml}`; + panel.innerHTML = `
${cardsHtml}
`; + _startAgentPoller(); } async function submitReview(taskName, status) { @@ -414,14 +559,19 @@ function switchView(view) { document.querySelectorAll('.view').forEach(v => v.classList.remove('active')); const target = document.getElementById(`view-${view}`); if (target) target.classList.add('active'); - renderCurrentView(); + if (view === 'agent') { + renderAgentTab(); // full render on switch; starts poller + } else { + _stopAgentPoller(); + renderCurrentView(); + } } function renderCurrentView() { switch (state.currentView) { case 'board': renderBoard(); break; case 'stats': renderStats(); break; - case 'timeline': renderTimeline(); break; + // Agent tab runs its own independent poller — not refreshed on global ticks } renderHeader(); } @@ -451,10 +601,10 @@ function attachCardListeners() { function setupKeyboard() { document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { closeDetail(); document.getElementById('help-modal').classList.remove('open'); document.getElementById('search-input').value = ''; state.searchQuery = ''; renderCurrentView(); } - else if (e.key === ' ' && !e.target.matches('input, textarea, select')) { e.preventDefault(); const views = ['board', 'stats', 'timeline']; const idx = views.indexOf(state.currentView); switchView(views[(idx + 1) % views.length]); } + else if (e.key === ' ' && !e.target.matches('input, textarea, select')) { e.preventDefault(); const views = ['board', 'stats', 'agent']; const idx = views.indexOf(state.currentView); switchView(views[(idx + 1) % views.length]); } else if (e.key === '1' && !e.target.matches('input, textarea, select')) { switchView('board'); } else if (e.key === '2' && !e.target.matches('input, textarea, select')) { switchView('stats'); } - else if (e.key === '3' && !e.target.matches('input, textarea, select')) { switchView('timeline'); } + else if (e.key === '3' && !e.target.matches('input, textarea, select')) { switchView('agent'); } else if (e.key === 't' && !e.target.matches('input, textarea, select')) { switchTheme(); } else if (e.key === 'r' && !e.target.matches('input, textarea, select')) { refreshData(); } else if (e.key === 'f' && !e.target.matches('input, textarea, select')) { state.filterVisible = !state.filterVisible; document.getElementById('filter-bar').classList.toggle('visible', state.filterVisible); } @@ -496,15 +646,12 @@ function applyConfig(config) { state.theme = config.theme; document.documentElement.setAttribute('data-theme', config.theme); } - if (config.default_view && ['board', 'statistics', 'timeline'].includes(config.default_view)) { + if (config.default_view && ['board', 'statistics', 'agent'].includes(config.default_view)) { switchView(config.default_view === 'statistics' ? 'stats' : config.default_view); } if (config.column_width && config.column_width >= 10) { document.documentElement.style.setProperty('--col-min-width', config.column_width + 'ch'); } - if (config.show_timelines === false) { - document.querySelectorAll('.timeline-phase, .timeline-wave').forEach(el => el.style.display = 'none'); - } } async function refreshData() { diff --git a/automaton/dashboard/html/index.html b/automaton/dashboard/html/index.html index 3d1d366..875dec8 100644 --- a/automaton/dashboard/html/index.html +++ b/automaton/dashboard/html/index.html @@ -17,7 +17,7 @@
- +
@@ -80,8 +80,8 @@
-
-
+
+
@@ -107,10 +107,10 @@

Keyboard Shortcuts

- + - + diff --git a/automaton/dashboard/html/styles.css b/automaton/dashboard/html/styles.css index c17992b..68e8f4e 100644 --- a/automaton/dashboard/html/styles.css +++ b/automaton/dashboard/html/styles.css @@ -256,37 +256,36 @@ body { .bar-track { flex: 1; height: 20px; background: var(--bg-primary); border-radius: 6px; overflow: hidden; } .bar-fill { height: 100%; border-radius: 6px; transition: width 0.4s ease; } .bar-count { width: 36px; font-size: 12px; color: var(--text-secondary); text-align: right; flex-shrink: 0; font-weight: 600; } -.timeline-panel { max-width: 900px; margin: 0 auto; } -.timeline-header { display: flex; align-items: center; gap: 10px; margin-bottom: 16px; flex-wrap: wrap; } -.phase-legend { display: flex; align-items: center; gap: 10px; } -.legend-item { display: flex; align-items: center; gap: 4px; font-size: 11px; color: var(--text-secondary); } -.legend-dot { width: 8px; height: 8px; border-radius: 50%; } -.legend-dot.complete { background: var(--success); } -.legend-dot.in_progress { background: var(--warning); } -.legend-dot.incomplete { background: var(--text-muted); } -.timeline-item { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-md); padding: 14px 18px; margin-bottom: 10px; } -.timeline-item-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; } -.timeline-item-name { font-size: 13px; font-weight: 500; color: var(--text-primary); } -.timeline-item-status { font-size: 13px; } -.timeline-phases { display: flex; gap: 4px; } -.timeline-phase { - width: 28px; height: 28px; border-radius: var(--radius-sm); - display: flex; align-items: center; justify-content: center; - font-size: 11px; font-weight: 600; +.agent-panel { max-width: 1100px; margin: 0 auto; } +.bg-loading, .bg-empty, .bg-error { padding: 24px; text-align: center; color: var(--text-secondary); font-size: 13px; } +.bg-error { color: var(--error); } +.bg-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; } +.bg-card { + background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-md); + padding: 14px 16px; box-shadow: var(--elevation-1); } -.timeline-phase.complete { background: var(--success); color: white; } -.timeline-phase.in_progress { background: var(--warning); color: var(--bg-primary); } -.timeline-phase.incomplete { background: var(--bg-primary); color: var(--text-muted); border: 1px solid var(--border-color); } -.timeline-wave { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--border-color); } -.timeline-wave h5 { font-size: 11px; font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 8px; } -.timeline-subtask-list { display: flex; flex-wrap: wrap; gap: 6px; } -.timeline-subtask { - display: flex; align-items: center; gap: 4px; padding: 3px 10px; - background: var(--bg-primary); border-radius: var(--radius-sm); font-size: 11px; color: var(--text-secondary); -} -.timeline-subtask.pass { border-left: 2px solid var(--success); } -.timeline-subtask.fail { border-left: 2px solid var(--error); } -.timeline-subtask.incomplete { border-left: 2px solid var(--text-muted); } +.bg-card.bg-status-ok { border-left: 3px solid var(--success); } +.bg-card.bg-status-muted { border-left: 3px solid var(--text-muted); } +.bg-card.bg-status-bad { border-left: 3px solid var(--error); } +.bg-card.bg-status-inactive { border-left: 3px solid var(--text-muted); opacity: 0.55; } +.bg-card-header { margin-bottom: 10px; } +.bg-card-title-row { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; } +.bg-name { font-size: 14px; color: var(--text-primary); } +.bg-name-inactive { color: var(--text-muted); } +.bg-agent-status { font-size: 10px; font-weight: 600; padding: 2px 8px; border-radius: 10px; text-transform: uppercase; letter-spacing: 0.04em; } +.bg-status { font-size: 10px; font-weight: 600; padding: 2px 8px; border-radius: 10px; text-transform: uppercase; letter-spacing: 0.04em; } +.bg-status-ok { background: var(--success-bg); color: var(--success); } +.bg-status-muted { background: rgba(112,117,122,0.15); color: var(--text-muted); } +.bg-status-bad { background: var(--error-bg); color: var(--error); } +.bg-body { font-size: 12px; color: var(--text-secondary); } +.bg-row { display: flex; gap: 8px; margin-bottom: 4px; } +.bg-row dt { color: var(--text-muted); min-width: 60px; font-weight: 500; } +.bg-row dd { color: var(--text-primary); word-break: break-all; } +.bg-runtime { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--border-color); } +.bg-runtime h5 { font-size: 10px; font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 6px; } +.bg-runtime dl { display: grid; grid-template-columns: auto 1fr; gap: 4px 10px; } +.bg-runtime dt { font-size: 11px; color: var(--text-muted); font-weight: 500; } +.bg-runtime dd { font-size: 11px; color: var(--text-primary); word-break: break-all; } .footer { display: flex; justify-content: space-between; align-items: center; padding: 8px 24px; background: var(--bg-secondary); border-top: 1px solid var(--border-color); font-size: 11px; color: var(--text-muted); flex-shrink: 0; } .help-modal { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.65); z-index: 200; align-items: center; justify-content: center; backdrop-filter: blur(4px); } .help-modal.open { display: flex; animation: fadeIn 0.15s ease; } diff --git a/automaton/dashboard/ui/app.py b/automaton/dashboard/ui/app.py index 9e513df..2ddfa91 100644 --- a/automaton/dashboard/ui/app.py +++ b/automaton/dashboard/ui/app.py @@ -18,6 +18,24 @@ from ..core.scope import detect_scope from ..core.task import discover_tasks, TaskState, COLUMN_HEADERS from ..config import DashboardConfig, get_config_path +_status_module = None + + +def _get_status_module(): + """Lazily import scripts/status.py so the dashboard can call + `_list_scheduled_jobs` without adding scripts/ to sys.path permanently.""" + global _status_module + if _status_module is None: + import importlib.util + status_path = Path.home() / ".automaton" / "scripts" / "status.py" + if not status_path.exists(): + return None + spec = importlib.util.spec_from_file_location("automaton_status", status_path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + _status_module = mod + return _status_module + # Task states for API responses - maps state names to artifact names TASK_STATE_ARTIFACT = { "research": "SPEC.md", @@ -86,6 +104,8 @@ class DashboardHandler(SimpleHTTPRequestHandler): self._serve_task(task_name) elif self.path == "/api/review-summary": self._serve_review_summary() + elif self.path == "/api/scheduled": + self._serve_scheduled() else: self._serve_static() @@ -383,6 +403,24 @@ class DashboardHandler(SimpleHTTPRequestHandler): counts["pending"] += 1 self._send_json(counts) + def _serve_scheduled(self): + """Serve the list of installed scheduled jobs (loop ticks + cleanup).""" + status_mod = _get_status_module() + if status_mod is None: + self._send_json({"jobs": [], "available": False}) + return + list_fn = getattr(status_mod, "_list_scheduled_jobs", None) + if list_fn is None: + self._send_json({"jobs": [], "available": False}) + return + try: + project_arg = str(self.project_root) if self.project_root else None + jobs = list_fn(project=project_arg) + except Exception as exc: + self._send_json({"jobs": [], "available": True, "error": str(exc)}) + return + self._send_json({"jobs": jobs, "available": True}) + def _send_json(self, data): self.send_response(200) self.send_header("Content-Type", "application/json") diff --git a/scripts/automaton-cleanup.sh b/scripts/automaton-cleanup.sh new file mode 100755 index 0000000..15dcadc --- /dev/null +++ b/scripts/automaton-cleanup.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +python3 "/Users/laptran/.automaton/scripts/status.py" --cleanup-done --days 7 diff --git a/scripts/status.py b/scripts/status.py index c1cce96..8fb942a 100755 --- a/scripts/status.py +++ b/scripts/status.py @@ -42,6 +42,8 @@ Usage: python status.py --available --agent {id} List available work python status.py --can-edit --project {p} [--task {name}] [--file {path}] Check if edits allowed (harness hook) python status.py --scope-check --task {name} --file {path} Check file scope + python status.py --cleanup-done [--days 7] [--dry-run] Archive complete tasks older than N days into tasks/complete/ + python status.py --install-cleanup-schedule [--days 7] [--interval 86400] Install daily cleanup job """ from __future__ import annotations @@ -262,7 +264,7 @@ def _all_task_dirs(project: Optional[str] = None) -> list[tuple[str, Path]]: if not base.exists(): return tasks for entry in sorted(base.iterdir()): - if entry.is_dir() and not entry.name.startswith("."): + if entry.is_dir() and not entry.name.startswith(".") and entry.name != "complete": tasks.append((entry.name, entry)) subtasks = entry / "subtasks" if subtasks.exists(): @@ -1625,6 +1627,44 @@ LOOP_TICK_SCRIPT_SH = "automaton-loop-tick.sh" LOOP_TICK_SCRIPT_BAT = "automaton-loop-tick.bat" LOOP_CONTEXT_FLOOR_KB = 16_000 # mirrors vram_detect.LOOP_MODE_CONTEXT_FLOOR_KB +CLEANUP_DEFAULT_DAYS = 7 +CLEANUP_DEFAULT_INTERVAL_SEC = 86400 # daily +CLEANUP_TICK_SCRIPT_SH = "automaton-cleanup.sh" +CLEANUP_TICK_SCRIPT_BAT = "automaton-cleanup.bat" +CLEANUP_LABEL = "cleanup" # launchd label: com.automaton.cleanup + + +def _completed_task_age_days(task_path: Path) -> Optional[float]: + """Days since the task last transitioned to its current phase, measured by + the ``.state`` file mtime (the moment ``_write_state`` recorded completion). + Returns None if ``.state`` is missing or unreadable.""" + state_file = task_path / ".state" + if not state_file.exists(): + return None + try: + mtime = state_file.stat().st_mtime + except OSError: + return None + return (datetime.now(timezone.utc).timestamp() - mtime) / 86400.0 + + +def _launchagents_dir() -> Path: + """LaunchAgents directory, overridable via AUTOMATON_LAUNCHAGENTS_DIR so + tests can redirect plist writes to a temp dir without touching the host.""" + override = os.environ.get("AUTOMATON_LAUNCHAGENTS_DIR") + if override: + return Path(override) + return Path.home() / "Library" / "LaunchAgents" + + +def _tasks_root_for(task_path: Path) -> Path: + """Return the tasks directory that should hold the ``complete/`` archive + for this task (handles subtask paths).""" + parent = task_path.parent + if parent.name == "complete": + return parent.parent + return parent + def _loops_dir(project: Optional[str] = None) -> Path: project_dir = _find_project_dir(project) @@ -1850,7 +1890,7 @@ def _disable_schedule(name: str, project: Optional[str]) -> None: loop_path = _loop_dir(name, project) system = platform.system() if system == "Darwin": - plist = Path.home() / "Library" / "LaunchAgents" / f"com.automaton.loop.{name}.plist" + plist = _launchagents_dir() / f"com.automaton.loop.{name}.plist" if plist.exists(): plist.rename(plist.with_suffix(".plist.disabled")) try: @@ -1883,14 +1923,11 @@ def _disable_schedule(name: str, project: Optional[str]) -> None: capture_output=True, timeout=5, check=False) -def _install_cron_block(name: str, loop_path: Path, interval: int) -> int: - """Install (or re-install) the cron block for a loop. Idempotent: strips - any prior block for the same loop name before appending the new one. - - Returns 0 on success, 2 on crontab write failure. - """ +def _install_cron_block_generic(marker: str, stub_path: Path, interval: int) -> int: + """Install (or re-install) an idempotent cron block delimited by + ``# `` / ``# end ``. Strips any prior block with the same + marker before appending the new one. Returns 0 on success, 2 on failure.""" minutes_interval = max(1, interval // 60) - stub_path = loop_path / LOOP_TICK_SCRIPT_SH try: res = subprocess.run(["crontab", "-l"], capture_output=True, text=True, timeout=5, check=False) @@ -1900,17 +1937,17 @@ def _install_cron_block(name: str, loop_path: Path, interval: int) -> int: kept = [] inside = False for line in existing: - if line.strip() == f"# automaton-loop:{name}": + if line.strip() == f"# {marker}": inside = True continue - if inside and line.strip() == f"# end automaton-loop:{name}": + if inside and line.strip() == f"# end {marker}": inside = False continue if not inside: kept.append(line) - kept.append(f"# automaton-loop:{name}") + kept.append(f"# {marker}") kept.append(f"*/{minutes_interval} * * * * {stub_path}") - kept.append(f"# end automaton-loop:{name}") + kept.append(f"# end {marker}") try: subprocess.run(["crontab", "-"], input="\n".join(kept) + "\n", capture_output=True, text=True, timeout=5, check=False) @@ -1920,12 +1957,22 @@ def _install_cron_block(name: str, loop_path: Path, interval: int) -> int: return 0 +def _install_cron_block(name: str, loop_path: Path, interval: int) -> int: + """Install (or re-install) the cron block for a loop. Idempotent: strips + any prior block for the same loop name before appending the new one. + + Returns 0 on success, 2 on crontab write failure. + """ + stub_path = loop_path / LOOP_TICK_SCRIPT_SH + return _install_cron_block_generic(f"automaton-loop:{name}", stub_path, interval) + + def _enable_schedule(name: str, project: Optional[str]) -> None: """Inverse of _disable_schedule. Called from --resume-loop after pause clear.""" loop_path = _loop_dir(name, project) system = platform.system() if system == "Darwin": - plist = Path.home() / "Library" / "LaunchAgents" / f"com.automaton.loop.{name}.plist" + plist = _launchagents_dir() / f"com.automaton.loop.{name}.plist" disabled = plist.with_suffix(".plist.disabled") if disabled.exists() and not plist.exists(): disabled.rename(plist) @@ -2028,7 +2075,7 @@ def cmd_install_schedule(args) -> int: system = platform.system() if system == "Darwin": - plist_dir = Path.home() / "Library" / "LaunchAgents" + plist_dir = _launchagents_dir() plist_dir.mkdir(parents=True, exist_ok=True) plist_path = plist_dir / f"com.automaton.loop.{name}.plist" plist = ( @@ -2072,6 +2119,251 @@ def cmd_install_schedule(args) -> int: return 2 +def cmd_cleanup_done(args) -> int: + """--cleanup-done [--days N] [--dry-run] [--json] + + Move tasks whose ``.state`` base phase is ``complete`` and whose completion + age (measured by ``.state`` mtime) is >= --days into the ``tasks/complete/`` + archive folder. Archived tasks are excluded from ``--list``/``--audit`` and + from the dashboard. Idempotent. ``--dry-run`` lists candidates without moving. + """ + days = args.days if args.days is not None else CLEANUP_DEFAULT_DAYS + if days < 0: + print("ERROR: --days must be non-negative") + return 2 + tasks = _all_task_dirs(args.project) + moved = [] + skipped = [] + candidates = [] + for name, path in tasks: + phase = _read_state(path) + if phase is None: + continue + if _base_phase(phase) != "complete": + continue + age = _completed_task_age_days(path) + if age is None: + continue + if age < days: + continue + candidates.append((name, path, age)) + tasks_root = _tasks_root_for(path) + complete_dir = tasks_root / "complete" + dest = complete_dir / name + if dest.exists(): + skipped.append({"name": name, "reason": "dest_exists", "age_days": round(age, 2)}) + continue + if args.dry_run: + moved.append({"name": name, "dest": str(dest), "age_days": round(age, 2), + "dry_run": True}) + continue + complete_dir.mkdir(parents=True, exist_ok=True) + try: + path.rename(dest) + except OSError as exc: + skipped.append({"name": name, "reason": f"rename_failed: {exc}", + "age_days": round(age, 2)}) + continue + moved.append({"name": name, "dest": str(dest), "age_days": round(age, 2)}) + + verb = "would move" if args.dry_run else "moved" + for item in moved: + print(f"[{verb}] {item['name']} (age {item['age_days']}d) -> {item['dest']}") + for item in skipped: + print(f"[skipped] {item['name']} ({item['reason']}, age {item['age_days']}d)") + if args.json_output: + summary = { + "days": days, "dry_run": bool(args.dry_run), + "moved": [m["name"] for m in moved], + "skipped": skipped, "candidates": [c[0] for c in candidates], + } + print(json.dumps(summary)) + return 0 + + +def _cleanup_stub_path() -> Path: + return AUTOMATON_DIR / "scripts" / "automaton-cleanup.sh" + + +def cmd_install_cleanup_schedule(args) -> int: + """--install-cleanup-schedule [--days N] [--interval SEC] + + Install an OS scheduler unit that runs ``--cleanup-done`` periodically + (default daily). Mirrors ``--install-schedule`` but for the cleanup job, + which is framework-wide (project = the framework dir).""" + days = args.days if args.days is not None else CLEANUP_DEFAULT_DAYS + interval = args.interval if args.interval is not None else CLEANUP_DEFAULT_INTERVAL_SEC + project_dir = _find_project_dir(args.project) + status_script = AUTOMATON_DIR / "scripts" / "status.py" + project_arg = f"--project \"{project_dir}\"" if str(project_dir) != str(AUTOMATON_DIR) else "" + + if platform.system() == "Windows": + stub_path = AUTOMATON_DIR / "scripts" / "automaton-cleanup.bat" + stub = ( + "@echo off\r\n" + f"python \"{status_script}\" --cleanup-done --days {days} {project_arg}\r\n" + ) + else: + stub_path = _cleanup_stub_path() + stub = ( + "#!/usr/bin/env bash\n" + f"python3 \"{status_script}\" --cleanup-done --days {days}" + + (f" {project_arg}\n" if project_arg else "\n") + ) + stub_path.write_text(stub) + if platform.system() != "Windows": + stub_path.chmod(0o755) + + system = platform.system() + if system == "Darwin": + plist_dir = _launchagents_dir() + plist_dir.mkdir(parents=True, exist_ok=True) + plist_path = plist_dir / f"com.automaton.cleanup.plist" + plist = ( + f"\n" + f"\n" + f"\n" + f"\n" + f" Labelcom.automaton.cleanup\n" + f" ProgramArguments\n" + f" \n" + f" {stub_path}\n" + f" \n" + f" StartInterval{interval}\n" + f" RunAtLoad\n" + f"\n" + f"\n" + ) + plist_path.write_text(plist) + print(f"Installed launchd unit: {plist_path}") + print(f"Interval: {interval}s, cleanup threshold: {days}d. Stub: {stub_path}") + return 0 + elif system == "Linux": + rc = _install_cron_block_generic("automaton-cleanup", stub_path, interval) + if rc == 0: + print(f"Installed crontab block (every {max(1, interval // 60)} min), " + f"threshold {days}d. Stub: {stub_path}") + return rc + elif system == "Windows": + minutes_interval = max(1, interval // 60) + subprocess.run( + ["schtasks", "/create", "/tn", "AutomatonCleanup", + "/tr", str(stub_path), "/sc", "minute", + "/mo", str(minutes_interval), "/f"], + capture_output=True, timeout=10, check=False, + ) + print(f"Installed schtasks unit (every {minutes_interval} min). Stub: {stub_path}") + return 0 + else: + print(f"ERROR: unsupported platform '{system}' for --install-cleanup-schedule") + return 2 + + +def _parse_launchd_plist(plist_path: Path) -> dict: + """Minimal plist extractor for ProgramArguments, StartInterval, Label.""" + import plistlib + try: + with plist_path.open("rb") as fh: + data = plistlib.load(fh) + return data + except (OSError, ValueError): + return {} + + +def _read_loop_runtime_state(name: str, project: Optional[str]) -> Optional[dict]: + try: + loop_path = _loop_dir(name, project) + except ValueError: + return None + return _read_state_loop(loop_path) + + +def _list_scheduled_jobs(project: Optional[str] = None) -> list[dict]: + """Enumerate installed scheduled jobs (loops + cleanup) for the dashboard + 'Background' tab. Each entry: ``{label, kind, status, next_run_seconds, + stub_path, runtime_state?}``. ``status`` ∈ {enabled, disabled, misconfigured}.""" + jobs: list[dict] = [] + system = platform.system() + + def _launchd_label_kind(label: str) -> tuple[str, str]: + # returns (kind, name_or_empty) + if label.startswith("com.automaton.loop."): + return ("loop", label[len("com.automaton.loop."):]) + if label in ("com.automaton.cleanup",): + return ("cleanup", "") + if label.startswith("com.automaton.cleanup."): + return ("cleanup", label[len("com.automaton.cleanup."):]) + return ("unknown", label) + + if system == "Darwin" or system == "Windows": + # On Windows we cannot easily enumerate schtasks entries here; on Darwin + # we scan LaunchAgents. (Windows listing is best-effort left to the + # dashboard surfacing 'unknown' for the tab.) + if system == "Darwin": + plist_dir = _launchagents_dir() + if plist_dir.exists(): + for entry in sorted(plist_dir.iterdir()): + if not entry.name.startswith("com.automaton."): + continue + disabled = entry.name.endswith(".plist.disabled") + real = entry.with_suffix("") if disabled else entry + label = real.stem # filename without .plist + data = _parse_launchd_plist(real) if real.exists() else {} + interval = data.get("StartInterval") + stub = (data.get("ProgramArguments") or [None])[0] + kind, sub = _launchd_label_kind(label) + runtime = None + agent_type = None + if kind == "loop" and sub: + s = _read_loop_runtime_state(sub, project) + runtime = s + loop_dir = _loop_dir(sub, project) + cfg = _read_loop_config(loop_dir) or {} + ws = cfg.get("work_source") or {} + agent_type = ws.get("kind", "single") + status = "misconfigured" if not real.exists() else ( + "disabled" if disabled else "enabled") + # flag stub pointing at a missing path + if stub and not Path(stub).exists(): + status = "misconfigured" + jobs.append({ + "label": label, "kind": kind, "name": sub, + "status": status, "next_run_seconds": interval, + "stub_path": stub, "runtime_state": runtime, + "agent_type": agent_type, + }) + if system == "Linux": + try: + res = subprocess.run(["crontab", "-l"], capture_output=True, text=True, + timeout=5, check=False) + lines = res.stdout.splitlines() if res.returncode == 0 else [] + except (OSError, subprocess.SubprocessError): + lines = [] + marker = None + for line in lines: + s = line.strip() + if s.startswith("# automaton-loop:") or s.startswith("#automaton-loop:"): + marker = s.lstrip("#").strip() + name = marker.split("automaton-loop:")[1] + cfg = _read_loop_config(_loop_dir(name, project)) or {} + ws = cfg.get("work_source") or {} + agent_type = ws.get("kind", "single") + jobs.append({ + "label": f"automaton-loop:{name}", "kind": "loop", "name": name, + "status": "enabled", "next_run_seconds": None, + "stub_path": None, "runtime_state": _read_loop_runtime_state(name, project), + "agent_type": agent_type, + }) + elif s in ("# automaton-cleanup", "#automaton-cleanup"): + jobs.append({ + "label": "automaton-cleanup", "kind": "cleanup", "name": "", + "status": "enabled", "next_run_seconds": None, + "stub_path": None, "runtime_state": None, + }) + return jobs + + def cmd_pause_loop(args) -> int: name = args.pause_loop loop_path = _loop_dir(name, args.project) @@ -2565,6 +2857,12 @@ def main(): parser.add_argument("--can-continue", metavar="NAME", help="Cheap status check: is the loop runnable right now?") parser.add_argument("--loop-list", action="store_true", help="List all loops and their status") parser.add_argument("--claim-loop-task", metavar="NAME", help="Claim a task for this loop (cross-loop ownership check)") + parser.add_argument("--cleanup-done", action="store_true", + help="Move complete tasks older than --days into tasks/complete/ (age by .state mtime)") + parser.add_argument("--install-cleanup-schedule", action="store_true", + help="Install an OS scheduler unit that runs --cleanup-done periodically (default daily)") + parser.add_argument("--days", type=int, help="Cleanup age threshold in days (default 7, used with --cleanup-done / --install-cleanup-schedule)") + parser.add_argument("--dry-run", action="store_true", help="With --cleanup-done, list candidates without moving them") parser.add_argument("--version", action="store_true", help="Print framework version and exit") args = parser.parse_args() @@ -2587,6 +2885,10 @@ def main(): return cmd_can_continue(args) if args.loop_list: return cmd_loop_list(args) + if args.install_cleanup_schedule: + return cmd_install_cleanup_schedule(args) + if args.cleanup_done: + return cmd_cleanup_done(args) if args.create_task: return cmd_create_task(args) if args.approve: diff --git a/tasks/actionable-phase-guidance/.state b/tasks/complete/actionable-phase-guidance/.state similarity index 100% rename from tasks/actionable-phase-guidance/.state rename to tasks/complete/actionable-phase-guidance/.state diff --git a/tasks/actionable-phase-guidance/.state.approvals b/tasks/complete/actionable-phase-guidance/.state.approvals similarity index 100% rename from tasks/actionable-phase-guidance/.state.approvals rename to tasks/complete/actionable-phase-guidance/.state.approvals diff --git a/tasks/actionable-phase-guidance/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/actionable-phase-guidance/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/actionable-phase-guidance/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/actionable-phase-guidance/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/actionable-phase-guidance/BUG_REPORT.md b/tasks/complete/actionable-phase-guidance/BUG_REPORT.md similarity index 100% rename from tasks/actionable-phase-guidance/BUG_REPORT.md rename to tasks/complete/actionable-phase-guidance/BUG_REPORT.md diff --git a/tasks/actionable-phase-guidance/DOC_REVIEW.md b/tasks/complete/actionable-phase-guidance/DOC_REVIEW.md similarity index 100% rename from tasks/actionable-phase-guidance/DOC_REVIEW.md rename to tasks/complete/actionable-phase-guidance/DOC_REVIEW.md diff --git a/tasks/actionable-phase-guidance/IMPLEMENTATION.md b/tasks/complete/actionable-phase-guidance/IMPLEMENTATION.md similarity index 100% rename from tasks/actionable-phase-guidance/IMPLEMENTATION.md rename to tasks/complete/actionable-phase-guidance/IMPLEMENTATION.md diff --git a/tasks/actionable-phase-guidance/SPEC.md b/tasks/complete/actionable-phase-guidance/SPEC.md similarity index 100% rename from tasks/actionable-phase-guidance/SPEC.md rename to tasks/complete/actionable-phase-guidance/SPEC.md diff --git a/tasks/actionable-phase-guidance/VERDICT.md b/tasks/complete/actionable-phase-guidance/VERDICT.md similarity index 100% rename from tasks/actionable-phase-guidance/VERDICT.md rename to tasks/complete/actionable-phase-guidance/VERDICT.md diff --git a/tasks/add-blast-radius-scheduler/.state b/tasks/complete/add-blast-radius-scheduler/.state similarity index 100% rename from tasks/add-blast-radius-scheduler/.state rename to tasks/complete/add-blast-radius-scheduler/.state diff --git a/tasks/add-blast-radius-scheduler/.state.approvals b/tasks/complete/add-blast-radius-scheduler/.state.approvals similarity index 100% rename from tasks/add-blast-radius-scheduler/.state.approvals rename to tasks/complete/add-blast-radius-scheduler/.state.approvals diff --git a/tasks/add-blast-radius-scheduler/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/add-blast-radius-scheduler/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/add-blast-radius-scheduler/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/add-blast-radius-scheduler/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/add-blast-radius-scheduler/BUG_REPORT.md b/tasks/complete/add-blast-radius-scheduler/BUG_REPORT.md similarity index 100% rename from tasks/add-blast-radius-scheduler/BUG_REPORT.md rename to tasks/complete/add-blast-radius-scheduler/BUG_REPORT.md diff --git a/tasks/add-blast-radius-scheduler/CODE_REVIEW.md b/tasks/complete/add-blast-radius-scheduler/CODE_REVIEW.md similarity index 100% rename from tasks/add-blast-radius-scheduler/CODE_REVIEW.md rename to tasks/complete/add-blast-radius-scheduler/CODE_REVIEW.md diff --git a/tasks/add-blast-radius-scheduler/DOC_REVIEW.md b/tasks/complete/add-blast-radius-scheduler/DOC_REVIEW.md similarity index 100% rename from tasks/add-blast-radius-scheduler/DOC_REVIEW.md rename to tasks/complete/add-blast-radius-scheduler/DOC_REVIEW.md diff --git a/tasks/add-blast-radius-scheduler/IMPLEMENTATION.md b/tasks/complete/add-blast-radius-scheduler/IMPLEMENTATION.md similarity index 100% rename from tasks/add-blast-radius-scheduler/IMPLEMENTATION.md rename to tasks/complete/add-blast-radius-scheduler/IMPLEMENTATION.md diff --git a/tasks/add-blast-radius-scheduler/SPEC.md b/tasks/complete/add-blast-radius-scheduler/SPEC.md similarity index 100% rename from tasks/add-blast-radius-scheduler/SPEC.md rename to tasks/complete/add-blast-radius-scheduler/SPEC.md diff --git a/tasks/add-blast-radius-scheduler/VERDICT.md b/tasks/complete/add-blast-radius-scheduler/VERDICT.md similarity index 100% rename from tasks/add-blast-radius-scheduler/VERDICT.md rename to tasks/complete/add-blast-radius-scheduler/VERDICT.md diff --git a/tasks/add-decomposition-content/.state b/tasks/complete/add-decomposition-content/.state similarity index 100% rename from tasks/add-decomposition-content/.state rename to tasks/complete/add-decomposition-content/.state diff --git a/tasks/add-decomposition-content/IMPLEMENTATION.md b/tasks/complete/add-decomposition-content/IMPLEMENTATION.md similarity index 100% rename from tasks/add-decomposition-content/IMPLEMENTATION.md rename to tasks/complete/add-decomposition-content/IMPLEMENTATION.md diff --git a/tasks/add-decomposition-content/REVIEW.md b/tasks/complete/add-decomposition-content/REVIEW.md similarity index 100% rename from tasks/add-decomposition-content/REVIEW.md rename to tasks/complete/add-decomposition-content/REVIEW.md diff --git a/tasks/add-decomposition-content/SPEC.md b/tasks/complete/add-decomposition-content/SPEC.md similarity index 100% rename from tasks/add-decomposition-content/SPEC.md rename to tasks/complete/add-decomposition-content/SPEC.md diff --git a/tasks/add-decomposition-content/VERDICT.md b/tasks/complete/add-decomposition-content/VERDICT.md similarity index 100% rename from tasks/add-decomposition-content/VERDICT.md rename to tasks/complete/add-decomposition-content/VERDICT.md diff --git a/tasks/add-goal-mode/.state b/tasks/complete/add-goal-mode/.state similarity index 100% rename from tasks/add-goal-mode/.state rename to tasks/complete/add-goal-mode/.state diff --git a/tasks/add-goal-mode/.state.approvals b/tasks/complete/add-goal-mode/.state.approvals similarity index 100% rename from tasks/add-goal-mode/.state.approvals rename to tasks/complete/add-goal-mode/.state.approvals diff --git a/tasks/add-goal-mode/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/add-goal-mode/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/add-goal-mode/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/add-goal-mode/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/add-goal-mode/BUG_REPORT.md b/tasks/complete/add-goal-mode/BUG_REPORT.md similarity index 100% rename from tasks/add-goal-mode/BUG_REPORT.md rename to tasks/complete/add-goal-mode/BUG_REPORT.md diff --git a/tasks/add-goal-mode/CODE_REVIEW.md b/tasks/complete/add-goal-mode/CODE_REVIEW.md similarity index 100% rename from tasks/add-goal-mode/CODE_REVIEW.md rename to tasks/complete/add-goal-mode/CODE_REVIEW.md diff --git a/tasks/add-goal-mode/DOC_REVIEW.md b/tasks/complete/add-goal-mode/DOC_REVIEW.md similarity index 100% rename from tasks/add-goal-mode/DOC_REVIEW.md rename to tasks/complete/add-goal-mode/DOC_REVIEW.md diff --git a/tasks/add-goal-mode/IMPLEMENTATION.md b/tasks/complete/add-goal-mode/IMPLEMENTATION.md similarity index 100% rename from tasks/add-goal-mode/IMPLEMENTATION.md rename to tasks/complete/add-goal-mode/IMPLEMENTATION.md diff --git a/tasks/add-goal-mode/SPEC.md b/tasks/complete/add-goal-mode/SPEC.md similarity index 100% rename from tasks/add-goal-mode/SPEC.md rename to tasks/complete/add-goal-mode/SPEC.md diff --git a/tasks/add-goal-mode/VERDICT.md b/tasks/complete/add-goal-mode/VERDICT.md similarity index 100% rename from tasks/add-goal-mode/VERDICT.md rename to tasks/complete/add-goal-mode/VERDICT.md diff --git a/tasks/add-loop-runner/.state b/tasks/complete/add-loop-runner/.state similarity index 100% rename from tasks/add-loop-runner/.state rename to tasks/complete/add-loop-runner/.state diff --git a/tasks/add-loop-runner/.state.approvals b/tasks/complete/add-loop-runner/.state.approvals similarity index 100% rename from tasks/add-loop-runner/.state.approvals rename to tasks/complete/add-loop-runner/.state.approvals diff --git a/tasks/add-loop-runner/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/add-loop-runner/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/add-loop-runner/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/add-loop-runner/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/add-loop-runner/BUG_REPORT.md b/tasks/complete/add-loop-runner/BUG_REPORT.md similarity index 100% rename from tasks/add-loop-runner/BUG_REPORT.md rename to tasks/complete/add-loop-runner/BUG_REPORT.md diff --git a/tasks/add-loop-runner/CODE_REVIEW.md b/tasks/complete/add-loop-runner/CODE_REVIEW.md similarity index 100% rename from tasks/add-loop-runner/CODE_REVIEW.md rename to tasks/complete/add-loop-runner/CODE_REVIEW.md diff --git a/tasks/add-loop-runner/DOC_REVIEW.md b/tasks/complete/add-loop-runner/DOC_REVIEW.md similarity index 100% rename from tasks/add-loop-runner/DOC_REVIEW.md rename to tasks/complete/add-loop-runner/DOC_REVIEW.md diff --git a/tasks/add-loop-runner/IMPLEMENTATION.md b/tasks/complete/add-loop-runner/IMPLEMENTATION.md similarity index 100% rename from tasks/add-loop-runner/IMPLEMENTATION.md rename to tasks/complete/add-loop-runner/IMPLEMENTATION.md diff --git a/tasks/add-loop-runner/SPEC.md b/tasks/complete/add-loop-runner/SPEC.md similarity index 100% rename from tasks/add-loop-runner/SPEC.md rename to tasks/complete/add-loop-runner/SPEC.md diff --git a/tasks/add-loop-runner/VERDICT.md b/tasks/complete/add-loop-runner/VERDICT.md similarity index 100% rename from tasks/add-loop-runner/VERDICT.md rename to tasks/complete/add-loop-runner/VERDICT.md diff --git a/tasks/add-loop-templates-onboarding/.state b/tasks/complete/add-loop-templates-onboarding/.state similarity index 100% rename from tasks/add-loop-templates-onboarding/.state rename to tasks/complete/add-loop-templates-onboarding/.state diff --git a/tasks/add-loop-templates-onboarding/.state.approvals b/tasks/complete/add-loop-templates-onboarding/.state.approvals similarity index 100% rename from tasks/add-loop-templates-onboarding/.state.approvals rename to tasks/complete/add-loop-templates-onboarding/.state.approvals diff --git a/tasks/add-loop-templates-onboarding/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/add-loop-templates-onboarding/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/add-loop-templates-onboarding/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/add-loop-templates-onboarding/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/add-loop-templates-onboarding/BUG_REPORT.md b/tasks/complete/add-loop-templates-onboarding/BUG_REPORT.md similarity index 100% rename from tasks/add-loop-templates-onboarding/BUG_REPORT.md rename to tasks/complete/add-loop-templates-onboarding/BUG_REPORT.md diff --git a/tasks/add-loop-templates-onboarding/CODE_REVIEW.md b/tasks/complete/add-loop-templates-onboarding/CODE_REVIEW.md similarity index 100% rename from tasks/add-loop-templates-onboarding/CODE_REVIEW.md rename to tasks/complete/add-loop-templates-onboarding/CODE_REVIEW.md diff --git a/tasks/add-loop-templates-onboarding/DOC_REVIEW.md b/tasks/complete/add-loop-templates-onboarding/DOC_REVIEW.md similarity index 100% rename from tasks/add-loop-templates-onboarding/DOC_REVIEW.md rename to tasks/complete/add-loop-templates-onboarding/DOC_REVIEW.md diff --git a/tasks/add-loop-templates-onboarding/IMPLEMENTATION.md b/tasks/complete/add-loop-templates-onboarding/IMPLEMENTATION.md similarity index 100% rename from tasks/add-loop-templates-onboarding/IMPLEMENTATION.md rename to tasks/complete/add-loop-templates-onboarding/IMPLEMENTATION.md diff --git a/tasks/add-loop-templates-onboarding/SPEC.md b/tasks/complete/add-loop-templates-onboarding/SPEC.md similarity index 100% rename from tasks/add-loop-templates-onboarding/SPEC.md rename to tasks/complete/add-loop-templates-onboarding/SPEC.md diff --git a/tasks/add-loop-templates-onboarding/VERDICT.md b/tasks/complete/add-loop-templates-onboarding/VERDICT.md similarity index 100% rename from tasks/add-loop-templates-onboarding/VERDICT.md rename to tasks/complete/add-loop-templates-onboarding/VERDICT.md diff --git a/tasks/add-post-commit-autopilot-driver/.state b/tasks/complete/add-post-commit-autopilot-driver/.state similarity index 100% rename from tasks/add-post-commit-autopilot-driver/.state rename to tasks/complete/add-post-commit-autopilot-driver/.state diff --git a/tasks/add-post-commit-autopilot-driver/.state.approvals b/tasks/complete/add-post-commit-autopilot-driver/.state.approvals similarity index 100% rename from tasks/add-post-commit-autopilot-driver/.state.approvals rename to tasks/complete/add-post-commit-autopilot-driver/.state.approvals diff --git a/tasks/add-post-commit-autopilot-driver/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/add-post-commit-autopilot-driver/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/add-post-commit-autopilot-driver/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/add-post-commit-autopilot-driver/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/add-post-commit-autopilot-driver/BUG_REPORT.md b/tasks/complete/add-post-commit-autopilot-driver/BUG_REPORT.md similarity index 100% rename from tasks/add-post-commit-autopilot-driver/BUG_REPORT.md rename to tasks/complete/add-post-commit-autopilot-driver/BUG_REPORT.md diff --git a/tasks/add-post-commit-autopilot-driver/CODE_REVIEW.md b/tasks/complete/add-post-commit-autopilot-driver/CODE_REVIEW.md similarity index 100% rename from tasks/add-post-commit-autopilot-driver/CODE_REVIEW.md rename to tasks/complete/add-post-commit-autopilot-driver/CODE_REVIEW.md diff --git a/tasks/add-post-commit-autopilot-driver/DOC_REVIEW.md b/tasks/complete/add-post-commit-autopilot-driver/DOC_REVIEW.md similarity index 100% rename from tasks/add-post-commit-autopilot-driver/DOC_REVIEW.md rename to tasks/complete/add-post-commit-autopilot-driver/DOC_REVIEW.md diff --git a/tasks/add-post-commit-autopilot-driver/IMPLEMENTATION.md b/tasks/complete/add-post-commit-autopilot-driver/IMPLEMENTATION.md similarity index 100% rename from tasks/add-post-commit-autopilot-driver/IMPLEMENTATION.md rename to tasks/complete/add-post-commit-autopilot-driver/IMPLEMENTATION.md diff --git a/tasks/add-post-commit-autopilot-driver/SPEC.md b/tasks/complete/add-post-commit-autopilot-driver/SPEC.md similarity index 100% rename from tasks/add-post-commit-autopilot-driver/SPEC.md rename to tasks/complete/add-post-commit-autopilot-driver/SPEC.md diff --git a/tasks/add-post-commit-autopilot-driver/VERDICT.md b/tasks/complete/add-post-commit-autopilot-driver/VERDICT.md similarity index 100% rename from tasks/add-post-commit-autopilot-driver/VERDICT.md rename to tasks/complete/add-post-commit-autopilot-driver/VERDICT.md diff --git a/tasks/add-pytest-test-suite/.state b/tasks/complete/add-pytest-test-suite/.state similarity index 100% rename from tasks/add-pytest-test-suite/.state rename to tasks/complete/add-pytest-test-suite/.state diff --git a/tasks/add-pytest-test-suite/IMPLEMENTATION.md b/tasks/complete/add-pytest-test-suite/IMPLEMENTATION.md similarity index 100% rename from tasks/add-pytest-test-suite/IMPLEMENTATION.md rename to tasks/complete/add-pytest-test-suite/IMPLEMENTATION.md diff --git a/tasks/add-pytest-test-suite/REVIEW.md b/tasks/complete/add-pytest-test-suite/REVIEW.md similarity index 100% rename from tasks/add-pytest-test-suite/REVIEW.md rename to tasks/complete/add-pytest-test-suite/REVIEW.md diff --git a/tasks/add-pytest-test-suite/SPEC.md b/tasks/complete/add-pytest-test-suite/SPEC.md similarity index 100% rename from tasks/add-pytest-test-suite/SPEC.md rename to tasks/complete/add-pytest-test-suite/SPEC.md diff --git a/tasks/add-pytest-test-suite/VERDICT.md b/tasks/complete/add-pytest-test-suite/VERDICT.md similarity index 100% rename from tasks/add-pytest-test-suite/VERDICT.md rename to tasks/complete/add-pytest-test-suite/VERDICT.md diff --git a/tasks/add-self-improvement-loop/.state b/tasks/complete/add-self-improvement-loop/.state similarity index 100% rename from tasks/add-self-improvement-loop/.state rename to tasks/complete/add-self-improvement-loop/.state diff --git a/tasks/add-self-improvement-loop/.state.approvals b/tasks/complete/add-self-improvement-loop/.state.approvals similarity index 100% rename from tasks/add-self-improvement-loop/.state.approvals rename to tasks/complete/add-self-improvement-loop/.state.approvals diff --git a/tasks/add-self-improvement-loop/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/add-self-improvement-loop/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/add-self-improvement-loop/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/add-self-improvement-loop/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/add-self-improvement-loop/BUG_REPORT.md b/tasks/complete/add-self-improvement-loop/BUG_REPORT.md similarity index 100% rename from tasks/add-self-improvement-loop/BUG_REPORT.md rename to tasks/complete/add-self-improvement-loop/BUG_REPORT.md diff --git a/tasks/add-self-improvement-loop/CODE_REVIEW.md b/tasks/complete/add-self-improvement-loop/CODE_REVIEW.md similarity index 100% rename from tasks/add-self-improvement-loop/CODE_REVIEW.md rename to tasks/complete/add-self-improvement-loop/CODE_REVIEW.md diff --git a/tasks/add-self-improvement-loop/DOC_REVIEW.md b/tasks/complete/add-self-improvement-loop/DOC_REVIEW.md similarity index 100% rename from tasks/add-self-improvement-loop/DOC_REVIEW.md rename to tasks/complete/add-self-improvement-loop/DOC_REVIEW.md diff --git a/tasks/add-self-improvement-loop/IMPLEMENTATION.md b/tasks/complete/add-self-improvement-loop/IMPLEMENTATION.md similarity index 100% rename from tasks/add-self-improvement-loop/IMPLEMENTATION.md rename to tasks/complete/add-self-improvement-loop/IMPLEMENTATION.md diff --git a/tasks/add-self-improvement-loop/RESEARCH.md b/tasks/complete/add-self-improvement-loop/RESEARCH.md similarity index 100% rename from tasks/add-self-improvement-loop/RESEARCH.md rename to tasks/complete/add-self-improvement-loop/RESEARCH.md diff --git a/tasks/add-self-improvement-loop/SPEC.md b/tasks/complete/add-self-improvement-loop/SPEC.md similarity index 100% rename from tasks/add-self-improvement-loop/SPEC.md rename to tasks/complete/add-self-improvement-loop/SPEC.md diff --git a/tasks/add-self-improvement-loop/VERDICT.md b/tasks/complete/add-self-improvement-loop/VERDICT.md similarity index 100% rename from tasks/add-self-improvement-loop/VERDICT.md rename to tasks/complete/add-self-improvement-loop/VERDICT.md diff --git a/tasks/add-status-brakes/.state b/tasks/complete/add-status-brakes/.state similarity index 100% rename from tasks/add-status-brakes/.state rename to tasks/complete/add-status-brakes/.state diff --git a/tasks/add-status-brakes/.state.approvals b/tasks/complete/add-status-brakes/.state.approvals similarity index 100% rename from tasks/add-status-brakes/.state.approvals rename to tasks/complete/add-status-brakes/.state.approvals diff --git a/tasks/add-status-brakes/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/add-status-brakes/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/add-status-brakes/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/add-status-brakes/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/add-status-brakes/BUG_REPORT.md b/tasks/complete/add-status-brakes/BUG_REPORT.md similarity index 100% rename from tasks/add-status-brakes/BUG_REPORT.md rename to tasks/complete/add-status-brakes/BUG_REPORT.md diff --git a/tasks/add-status-brakes/CODE_REVIEW.md b/tasks/complete/add-status-brakes/CODE_REVIEW.md similarity index 100% rename from tasks/add-status-brakes/CODE_REVIEW.md rename to tasks/complete/add-status-brakes/CODE_REVIEW.md diff --git a/tasks/add-status-brakes/DOC_REVIEW.md b/tasks/complete/add-status-brakes/DOC_REVIEW.md similarity index 100% rename from tasks/add-status-brakes/DOC_REVIEW.md rename to tasks/complete/add-status-brakes/DOC_REVIEW.md diff --git a/tasks/add-status-brakes/IMPLEMENTATION.md b/tasks/complete/add-status-brakes/IMPLEMENTATION.md similarity index 100% rename from tasks/add-status-brakes/IMPLEMENTATION.md rename to tasks/complete/add-status-brakes/IMPLEMENTATION.md diff --git a/tasks/add-status-brakes/SPEC.md b/tasks/complete/add-status-brakes/SPEC.md similarity index 100% rename from tasks/add-status-brakes/SPEC.md rename to tasks/complete/add-status-brakes/SPEC.md diff --git a/tasks/add-status-brakes/VERDICT.md b/tasks/complete/add-status-brakes/VERDICT.md similarity index 100% rename from tasks/add-status-brakes/VERDICT.md rename to tasks/complete/add-status-brakes/VERDICT.md diff --git a/tasks/additive-extension-model/.state b/tasks/complete/additive-extension-model/.state similarity index 100% rename from tasks/additive-extension-model/.state rename to tasks/complete/additive-extension-model/.state diff --git a/tasks/additive-extension-model/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/additive-extension-model/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/additive-extension-model/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/additive-extension-model/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/additive-extension-model/BUG_REPORT.md b/tasks/complete/additive-extension-model/BUG_REPORT.md similarity index 100% rename from tasks/additive-extension-model/BUG_REPORT.md rename to tasks/complete/additive-extension-model/BUG_REPORT.md diff --git a/tasks/additive-extension-model/DOC_REVIEW.md b/tasks/complete/additive-extension-model/DOC_REVIEW.md similarity index 100% rename from tasks/additive-extension-model/DOC_REVIEW.md rename to tasks/complete/additive-extension-model/DOC_REVIEW.md diff --git a/tasks/additive-extension-model/IMPLEMENTATION.md b/tasks/complete/additive-extension-model/IMPLEMENTATION.md similarity index 100% rename from tasks/additive-extension-model/IMPLEMENTATION.md rename to tasks/complete/additive-extension-model/IMPLEMENTATION.md diff --git a/tasks/additive-extension-model/REVIEW.md b/tasks/complete/additive-extension-model/REVIEW.md similarity index 100% rename from tasks/additive-extension-model/REVIEW.md rename to tasks/complete/additive-extension-model/REVIEW.md diff --git a/tasks/additive-extension-model/SPEC.md b/tasks/complete/additive-extension-model/SPEC.md similarity index 100% rename from tasks/additive-extension-model/SPEC.md rename to tasks/complete/additive-extension-model/SPEC.md diff --git a/tasks/additive-extension-model/VERDICT.md b/tasks/complete/additive-extension-model/VERDICT.md similarity index 100% rename from tasks/additive-extension-model/VERDICT.md rename to tasks/complete/additive-extension-model/VERDICT.md diff --git a/tasks/artifact-badges/.state b/tasks/complete/artifact-badges/.state similarity index 100% rename from tasks/artifact-badges/.state rename to tasks/complete/artifact-badges/.state diff --git a/tasks/artifact-badges/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/artifact-badges/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/artifact-badges/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/artifact-badges/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/artifact-badges/BUG_REPORT.md b/tasks/complete/artifact-badges/BUG_REPORT.md similarity index 100% rename from tasks/artifact-badges/BUG_REPORT.md rename to tasks/complete/artifact-badges/BUG_REPORT.md diff --git a/tasks/artifact-badges/DOC_REVIEW.md b/tasks/complete/artifact-badges/DOC_REVIEW.md similarity index 100% rename from tasks/artifact-badges/DOC_REVIEW.md rename to tasks/complete/artifact-badges/DOC_REVIEW.md diff --git a/tasks/artifact-badges/IMPLEMENTATION.md b/tasks/complete/artifact-badges/IMPLEMENTATION.md similarity index 100% rename from tasks/artifact-badges/IMPLEMENTATION.md rename to tasks/complete/artifact-badges/IMPLEMENTATION.md diff --git a/tasks/artifact-badges/REVIEW.md b/tasks/complete/artifact-badges/REVIEW.md similarity index 100% rename from tasks/artifact-badges/REVIEW.md rename to tasks/complete/artifact-badges/REVIEW.md diff --git a/tasks/artifact-badges/SPEC.md b/tasks/complete/artifact-badges/SPEC.md similarity index 100% rename from tasks/artifact-badges/SPEC.md rename to tasks/complete/artifact-badges/SPEC.md diff --git a/tasks/artifact-badges/VERDICT.md b/tasks/complete/artifact-badges/VERDICT.md similarity index 100% rename from tasks/artifact-badges/VERDICT.md rename to tasks/complete/artifact-badges/VERDICT.md diff --git a/tasks/autopilot-gate-integration/.state b/tasks/complete/autopilot-gate-integration/.state similarity index 100% rename from tasks/autopilot-gate-integration/.state rename to tasks/complete/autopilot-gate-integration/.state diff --git a/tasks/autopilot-gate-integration/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/autopilot-gate-integration/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/autopilot-gate-integration/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/autopilot-gate-integration/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/autopilot-gate-integration/BUG_REPORT.md b/tasks/complete/autopilot-gate-integration/BUG_REPORT.md similarity index 100% rename from tasks/autopilot-gate-integration/BUG_REPORT.md rename to tasks/complete/autopilot-gate-integration/BUG_REPORT.md diff --git a/tasks/autopilot-gate-integration/DOC_REVIEW.md b/tasks/complete/autopilot-gate-integration/DOC_REVIEW.md similarity index 100% rename from tasks/autopilot-gate-integration/DOC_REVIEW.md rename to tasks/complete/autopilot-gate-integration/DOC_REVIEW.md diff --git a/tasks/autopilot-gate-integration/IMPLEMENTATION.md b/tasks/complete/autopilot-gate-integration/IMPLEMENTATION.md similarity index 100% rename from tasks/autopilot-gate-integration/IMPLEMENTATION.md rename to tasks/complete/autopilot-gate-integration/IMPLEMENTATION.md diff --git a/tasks/autopilot-gate-integration/SPEC.md b/tasks/complete/autopilot-gate-integration/SPEC.md similarity index 100% rename from tasks/autopilot-gate-integration/SPEC.md rename to tasks/complete/autopilot-gate-integration/SPEC.md diff --git a/tasks/autopilot-gate-integration/VERDICT.md b/tasks/complete/autopilot-gate-integration/VERDICT.md similarity index 100% rename from tasks/autopilot-gate-integration/VERDICT.md rename to tasks/complete/autopilot-gate-integration/VERDICT.md diff --git a/tasks/changelog/.state b/tasks/complete/changelog/.state similarity index 100% rename from tasks/changelog/.state rename to tasks/complete/changelog/.state diff --git a/tasks/changelog/BUG_REPORT.md b/tasks/complete/changelog/BUG_REPORT.md similarity index 100% rename from tasks/changelog/BUG_REPORT.md rename to tasks/complete/changelog/BUG_REPORT.md diff --git a/tasks/changelog/DOC_REVIEW.md b/tasks/complete/changelog/DOC_REVIEW.md similarity index 100% rename from tasks/changelog/DOC_REVIEW.md rename to tasks/complete/changelog/DOC_REVIEW.md diff --git a/tasks/changelog/IMPLEMENTATION.md b/tasks/complete/changelog/IMPLEMENTATION.md similarity index 100% rename from tasks/changelog/IMPLEMENTATION.md rename to tasks/complete/changelog/IMPLEMENTATION.md diff --git a/tasks/changelog/REVIEW.md b/tasks/complete/changelog/REVIEW.md similarity index 100% rename from tasks/changelog/REVIEW.md rename to tasks/complete/changelog/REVIEW.md diff --git a/tasks/changelog/SPEC.md b/tasks/complete/changelog/SPEC.md similarity index 100% rename from tasks/changelog/SPEC.md rename to tasks/complete/changelog/SPEC.md diff --git a/tasks/changelog/VERDICT.md b/tasks/complete/changelog/VERDICT.md similarity index 100% rename from tasks/changelog/VERDICT.md rename to tasks/complete/changelog/VERDICT.md diff --git a/tasks/cleanup-cruft/.state b/tasks/complete/cleanup-cruft/.state similarity index 100% rename from tasks/cleanup-cruft/.state rename to tasks/complete/cleanup-cruft/.state diff --git a/tasks/cleanup-cruft/IMPLEMENTATION.md b/tasks/complete/cleanup-cruft/IMPLEMENTATION.md similarity index 100% rename from tasks/cleanup-cruft/IMPLEMENTATION.md rename to tasks/complete/cleanup-cruft/IMPLEMENTATION.md diff --git a/tasks/cleanup-cruft/REVIEW.md b/tasks/complete/cleanup-cruft/REVIEW.md similarity index 100% rename from tasks/cleanup-cruft/REVIEW.md rename to tasks/complete/cleanup-cruft/REVIEW.md diff --git a/tasks/cleanup-cruft/SPEC.md b/tasks/complete/cleanup-cruft/SPEC.md similarity index 100% rename from tasks/cleanup-cruft/SPEC.md rename to tasks/complete/cleanup-cruft/SPEC.md diff --git a/tasks/cleanup-cruft/VERDICT.md b/tasks/complete/cleanup-cruft/VERDICT.md similarity index 100% rename from tasks/cleanup-cruft/VERDICT.md rename to tasks/complete/cleanup-cruft/VERDICT.md diff --git a/tasks/dashboard-task-review/.state b/tasks/complete/dashboard-task-review/.state similarity index 100% rename from tasks/dashboard-task-review/.state rename to tasks/complete/dashboard-task-review/.state diff --git a/tasks/dashboard-task-review/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/dashboard-task-review/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/dashboard-task-review/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/dashboard-task-review/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/dashboard-task-review/BUG_REPORT.md b/tasks/complete/dashboard-task-review/BUG_REPORT.md similarity index 100% rename from tasks/dashboard-task-review/BUG_REPORT.md rename to tasks/complete/dashboard-task-review/BUG_REPORT.md diff --git a/tasks/dashboard-task-review/DOC_REVIEW.md b/tasks/complete/dashboard-task-review/DOC_REVIEW.md similarity index 100% rename from tasks/dashboard-task-review/DOC_REVIEW.md rename to tasks/complete/dashboard-task-review/DOC_REVIEW.md diff --git a/tasks/dashboard-task-review/IMPLEMENTATION.md b/tasks/complete/dashboard-task-review/IMPLEMENTATION.md similarity index 100% rename from tasks/dashboard-task-review/IMPLEMENTATION.md rename to tasks/complete/dashboard-task-review/IMPLEMENTATION.md diff --git a/tasks/dashboard-task-review/REVIEW.md b/tasks/complete/dashboard-task-review/REVIEW.md similarity index 100% rename from tasks/dashboard-task-review/REVIEW.md rename to tasks/complete/dashboard-task-review/REVIEW.md diff --git a/tasks/dashboard-task-review/SPEC.md b/tasks/complete/dashboard-task-review/SPEC.md similarity index 100% rename from tasks/dashboard-task-review/SPEC.md rename to tasks/complete/dashboard-task-review/SPEC.md diff --git a/tasks/dashboard-task-review/VERDICT.md b/tasks/complete/dashboard-task-review/VERDICT.md similarity index 100% rename from tasks/dashboard-task-review/VERDICT.md rename to tasks/complete/dashboard-task-review/VERDICT.md diff --git a/tasks/dashboard-toggle/.state b/tasks/complete/dashboard-toggle/.state similarity index 100% rename from tasks/dashboard-toggle/.state rename to tasks/complete/dashboard-toggle/.state diff --git a/tasks/dashboard-toggle/REVIEW.md b/tasks/complete/dashboard-toggle/REVIEW.md similarity index 100% rename from tasks/dashboard-toggle/REVIEW.md rename to tasks/complete/dashboard-toggle/REVIEW.md diff --git a/tasks/dashboard-toggle/SPEC.md b/tasks/complete/dashboard-toggle/SPEC.md similarity index 100% rename from tasks/dashboard-toggle/SPEC.md rename to tasks/complete/dashboard-toggle/SPEC.md diff --git a/tasks/dashboard-toggle/VERDICT.md b/tasks/complete/dashboard-toggle/VERDICT.md similarity index 100% rename from tasks/dashboard-toggle/VERDICT.md rename to tasks/complete/dashboard-toggle/VERDICT.md diff --git a/tasks/developer-experience-gitea-ci/.state b/tasks/complete/developer-experience-gitea-ci/.state similarity index 100% rename from tasks/developer-experience-gitea-ci/.state rename to tasks/complete/developer-experience-gitea-ci/.state diff --git a/tasks/developer-experience-gitea-ci/IMPLEMENTATION.md b/tasks/complete/developer-experience-gitea-ci/IMPLEMENTATION.md similarity index 100% rename from tasks/developer-experience-gitea-ci/IMPLEMENTATION.md rename to tasks/complete/developer-experience-gitea-ci/IMPLEMENTATION.md diff --git a/tasks/developer-experience-gitea-ci/REVIEW.md b/tasks/complete/developer-experience-gitea-ci/REVIEW.md similarity index 100% rename from tasks/developer-experience-gitea-ci/REVIEW.md rename to tasks/complete/developer-experience-gitea-ci/REVIEW.md diff --git a/tasks/developer-experience-gitea-ci/SPEC.md b/tasks/complete/developer-experience-gitea-ci/SPEC.md similarity index 100% rename from tasks/developer-experience-gitea-ci/SPEC.md rename to tasks/complete/developer-experience-gitea-ci/SPEC.md diff --git a/tasks/developer-experience-gitea-ci/VERDICT.md b/tasks/complete/developer-experience-gitea-ci/VERDICT.md similarity index 100% rename from tasks/developer-experience-gitea-ci/VERDICT.md rename to tasks/complete/developer-experience-gitea-ci/VERDICT.md diff --git a/tasks/fix-automation-gaps/.state b/tasks/complete/fix-automation-gaps/.state similarity index 100% rename from tasks/fix-automation-gaps/.state rename to tasks/complete/fix-automation-gaps/.state diff --git a/tasks/fix-automation-gaps/.state.approvals b/tasks/complete/fix-automation-gaps/.state.approvals similarity index 100% rename from tasks/fix-automation-gaps/.state.approvals rename to tasks/complete/fix-automation-gaps/.state.approvals diff --git a/tasks/fix-automation-gaps/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-automation-gaps/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-automation-gaps/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-automation-gaps/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-automation-gaps/BUG_REPORT.md b/tasks/complete/fix-automation-gaps/BUG_REPORT.md similarity index 100% rename from tasks/fix-automation-gaps/BUG_REPORT.md rename to tasks/complete/fix-automation-gaps/BUG_REPORT.md diff --git a/tasks/fix-automation-gaps/DOC_REVIEW.md b/tasks/complete/fix-automation-gaps/DOC_REVIEW.md similarity index 100% rename from tasks/fix-automation-gaps/DOC_REVIEW.md rename to tasks/complete/fix-automation-gaps/DOC_REVIEW.md diff --git a/tasks/fix-automation-gaps/IMPLEMENTATION.md b/tasks/complete/fix-automation-gaps/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-automation-gaps/IMPLEMENTATION.md rename to tasks/complete/fix-automation-gaps/IMPLEMENTATION.md diff --git a/tasks/fix-automation-gaps/SPEC.md b/tasks/complete/fix-automation-gaps/SPEC.md similarity index 100% rename from tasks/fix-automation-gaps/SPEC.md rename to tasks/complete/fix-automation-gaps/SPEC.md diff --git a/tasks/fix-automation-gaps/VERDICT.md b/tasks/complete/fix-automation-gaps/VERDICT.md similarity index 100% rename from tasks/fix-automation-gaps/VERDICT.md rename to tasks/complete/fix-automation-gaps/VERDICT.md diff --git a/tasks/fix-can-edit-path-prefix/.state b/tasks/complete/fix-can-edit-path-prefix/.state similarity index 100% rename from tasks/fix-can-edit-path-prefix/.state rename to tasks/complete/fix-can-edit-path-prefix/.state diff --git a/tasks/fix-can-edit-path-prefix/.state.approvals b/tasks/complete/fix-can-edit-path-prefix/.state.approvals similarity index 100% rename from tasks/fix-can-edit-path-prefix/.state.approvals rename to tasks/complete/fix-can-edit-path-prefix/.state.approvals diff --git a/tasks/fix-can-edit-path-prefix/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-can-edit-path-prefix/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-can-edit-path-prefix/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-can-edit-path-prefix/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-can-edit-path-prefix/BUG_REPORT.md b/tasks/complete/fix-can-edit-path-prefix/BUG_REPORT.md similarity index 100% rename from tasks/fix-can-edit-path-prefix/BUG_REPORT.md rename to tasks/complete/fix-can-edit-path-prefix/BUG_REPORT.md diff --git a/tasks/fix-can-edit-path-prefix/CODE_REVIEW.md b/tasks/complete/fix-can-edit-path-prefix/CODE_REVIEW.md similarity index 100% rename from tasks/fix-can-edit-path-prefix/CODE_REVIEW.md rename to tasks/complete/fix-can-edit-path-prefix/CODE_REVIEW.md diff --git a/tasks/fix-can-edit-path-prefix/DOC_REVIEW.md b/tasks/complete/fix-can-edit-path-prefix/DOC_REVIEW.md similarity index 100% rename from tasks/fix-can-edit-path-prefix/DOC_REVIEW.md rename to tasks/complete/fix-can-edit-path-prefix/DOC_REVIEW.md diff --git a/tasks/fix-can-edit-path-prefix/IMPLEMENTATION.md b/tasks/complete/fix-can-edit-path-prefix/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-can-edit-path-prefix/IMPLEMENTATION.md rename to tasks/complete/fix-can-edit-path-prefix/IMPLEMENTATION.md diff --git a/tasks/fix-can-edit-path-prefix/SPEC.md b/tasks/complete/fix-can-edit-path-prefix/SPEC.md similarity index 100% rename from tasks/fix-can-edit-path-prefix/SPEC.md rename to tasks/complete/fix-can-edit-path-prefix/SPEC.md diff --git a/tasks/fix-can-edit-path-prefix/VERDICT.md b/tasks/complete/fix-can-edit-path-prefix/VERDICT.md similarity index 100% rename from tasks/fix-can-edit-path-prefix/VERDICT.md rename to tasks/complete/fix-can-edit-path-prefix/VERDICT.md diff --git a/tasks/fix-cat3-audit-paths/.state b/tasks/complete/fix-cat3-audit-paths/.state similarity index 100% rename from tasks/fix-cat3-audit-paths/.state rename to tasks/complete/fix-cat3-audit-paths/.state diff --git a/tasks/fix-cat3-audit-paths/.state.approvals b/tasks/complete/fix-cat3-audit-paths/.state.approvals similarity index 100% rename from tasks/fix-cat3-audit-paths/.state.approvals rename to tasks/complete/fix-cat3-audit-paths/.state.approvals diff --git a/tasks/fix-cat3-audit-paths/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-cat3-audit-paths/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-cat3-audit-paths/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-cat3-audit-paths/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-cat3-audit-paths/BUG_REPORT.md b/tasks/complete/fix-cat3-audit-paths/BUG_REPORT.md similarity index 100% rename from tasks/fix-cat3-audit-paths/BUG_REPORT.md rename to tasks/complete/fix-cat3-audit-paths/BUG_REPORT.md diff --git a/tasks/fix-cat3-audit-paths/CODE_REVIEW.md b/tasks/complete/fix-cat3-audit-paths/CODE_REVIEW.md similarity index 100% rename from tasks/fix-cat3-audit-paths/CODE_REVIEW.md rename to tasks/complete/fix-cat3-audit-paths/CODE_REVIEW.md diff --git a/tasks/fix-cat3-audit-paths/DOC_REVIEW.md b/tasks/complete/fix-cat3-audit-paths/DOC_REVIEW.md similarity index 100% rename from tasks/fix-cat3-audit-paths/DOC_REVIEW.md rename to tasks/complete/fix-cat3-audit-paths/DOC_REVIEW.md diff --git a/tasks/fix-cat3-audit-paths/IMPLEMENTATION.md b/tasks/complete/fix-cat3-audit-paths/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-cat3-audit-paths/IMPLEMENTATION.md rename to tasks/complete/fix-cat3-audit-paths/IMPLEMENTATION.md diff --git a/tasks/fix-cat3-audit-paths/SPEC.md b/tasks/complete/fix-cat3-audit-paths/SPEC.md similarity index 100% rename from tasks/fix-cat3-audit-paths/SPEC.md rename to tasks/complete/fix-cat3-audit-paths/SPEC.md diff --git a/tasks/fix-cat3-audit-paths/VERDICT.md b/tasks/complete/fix-cat3-audit-paths/VERDICT.md similarity index 100% rename from tasks/fix-cat3-audit-paths/VERDICT.md rename to tasks/complete/fix-cat3-audit-paths/VERDICT.md diff --git a/tasks/fix-context-sizing/.state b/tasks/complete/fix-context-sizing/.state similarity index 100% rename from tasks/fix-context-sizing/.state rename to tasks/complete/fix-context-sizing/.state diff --git a/tasks/fix-context-sizing/.state.approvals b/tasks/complete/fix-context-sizing/.state.approvals similarity index 100% rename from tasks/fix-context-sizing/.state.approvals rename to tasks/complete/fix-context-sizing/.state.approvals diff --git a/tasks/fix-context-sizing/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-context-sizing/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-context-sizing/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-context-sizing/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-context-sizing/BUG_REPORT.md b/tasks/complete/fix-context-sizing/BUG_REPORT.md similarity index 100% rename from tasks/fix-context-sizing/BUG_REPORT.md rename to tasks/complete/fix-context-sizing/BUG_REPORT.md diff --git a/tasks/fix-context-sizing/CODE_REVIEW.md b/tasks/complete/fix-context-sizing/CODE_REVIEW.md similarity index 100% rename from tasks/fix-context-sizing/CODE_REVIEW.md rename to tasks/complete/fix-context-sizing/CODE_REVIEW.md diff --git a/tasks/fix-context-sizing/DOC_REVIEW.md b/tasks/complete/fix-context-sizing/DOC_REVIEW.md similarity index 100% rename from tasks/fix-context-sizing/DOC_REVIEW.md rename to tasks/complete/fix-context-sizing/DOC_REVIEW.md diff --git a/tasks/fix-context-sizing/IMPLEMENTATION.md b/tasks/complete/fix-context-sizing/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-context-sizing/IMPLEMENTATION.md rename to tasks/complete/fix-context-sizing/IMPLEMENTATION.md diff --git a/tasks/fix-context-sizing/SPEC.md b/tasks/complete/fix-context-sizing/SPEC.md similarity index 100% rename from tasks/fix-context-sizing/SPEC.md rename to tasks/complete/fix-context-sizing/SPEC.md diff --git a/tasks/fix-context-sizing/VERDICT.md b/tasks/complete/fix-context-sizing/VERDICT.md similarity index 100% rename from tasks/fix-context-sizing/VERDICT.md rename to tasks/complete/fix-context-sizing/VERDICT.md diff --git a/tasks/fix-dashboard-cors-origin/.state b/tasks/complete/fix-dashboard-cors-origin/.state similarity index 100% rename from tasks/fix-dashboard-cors-origin/.state rename to tasks/complete/fix-dashboard-cors-origin/.state diff --git a/tasks/fix-dashboard-cors-origin/.state.approvals b/tasks/complete/fix-dashboard-cors-origin/.state.approvals similarity index 100% rename from tasks/fix-dashboard-cors-origin/.state.approvals rename to tasks/complete/fix-dashboard-cors-origin/.state.approvals diff --git a/tasks/fix-dashboard-cors-origin/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-dashboard-cors-origin/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-dashboard-cors-origin/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-dashboard-cors-origin/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-dashboard-cors-origin/BUG_REPORT.md b/tasks/complete/fix-dashboard-cors-origin/BUG_REPORT.md similarity index 100% rename from tasks/fix-dashboard-cors-origin/BUG_REPORT.md rename to tasks/complete/fix-dashboard-cors-origin/BUG_REPORT.md diff --git a/tasks/fix-dashboard-cors-origin/CODE_REVIEW.md b/tasks/complete/fix-dashboard-cors-origin/CODE_REVIEW.md similarity index 100% rename from tasks/fix-dashboard-cors-origin/CODE_REVIEW.md rename to tasks/complete/fix-dashboard-cors-origin/CODE_REVIEW.md diff --git a/tasks/fix-dashboard-cors-origin/DOC_REVIEW.md b/tasks/complete/fix-dashboard-cors-origin/DOC_REVIEW.md similarity index 100% rename from tasks/fix-dashboard-cors-origin/DOC_REVIEW.md rename to tasks/complete/fix-dashboard-cors-origin/DOC_REVIEW.md diff --git a/tasks/fix-dashboard-cors-origin/IMPLEMENTATION.md b/tasks/complete/fix-dashboard-cors-origin/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-dashboard-cors-origin/IMPLEMENTATION.md rename to tasks/complete/fix-dashboard-cors-origin/IMPLEMENTATION.md diff --git a/tasks/fix-dashboard-cors-origin/SPEC.md b/tasks/complete/fix-dashboard-cors-origin/SPEC.md similarity index 100% rename from tasks/fix-dashboard-cors-origin/SPEC.md rename to tasks/complete/fix-dashboard-cors-origin/SPEC.md diff --git a/tasks/fix-dashboard-cors-origin/VERDICT.md b/tasks/complete/fix-dashboard-cors-origin/VERDICT.md similarity index 100% rename from tasks/fix-dashboard-cors-origin/VERDICT.md rename to tasks/complete/fix-dashboard-cors-origin/VERDICT.md diff --git a/tasks/fix-dashboard-read-state/.state b/tasks/complete/fix-dashboard-read-state/.state similarity index 100% rename from tasks/fix-dashboard-read-state/.state rename to tasks/complete/fix-dashboard-read-state/.state diff --git a/tasks/fix-dashboard-read-state/.state.approvals b/tasks/complete/fix-dashboard-read-state/.state.approvals similarity index 100% rename from tasks/fix-dashboard-read-state/.state.approvals rename to tasks/complete/fix-dashboard-read-state/.state.approvals diff --git a/tasks/fix-dashboard-read-state/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-dashboard-read-state/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-dashboard-read-state/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-dashboard-read-state/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-dashboard-read-state/BUG_REPORT.md b/tasks/complete/fix-dashboard-read-state/BUG_REPORT.md similarity index 100% rename from tasks/fix-dashboard-read-state/BUG_REPORT.md rename to tasks/complete/fix-dashboard-read-state/BUG_REPORT.md diff --git a/tasks/fix-dashboard-read-state/CODE_REVIEW.md b/tasks/complete/fix-dashboard-read-state/CODE_REVIEW.md similarity index 100% rename from tasks/fix-dashboard-read-state/CODE_REVIEW.md rename to tasks/complete/fix-dashboard-read-state/CODE_REVIEW.md diff --git a/tasks/fix-dashboard-read-state/DOC_REVIEW.md b/tasks/complete/fix-dashboard-read-state/DOC_REVIEW.md similarity index 100% rename from tasks/fix-dashboard-read-state/DOC_REVIEW.md rename to tasks/complete/fix-dashboard-read-state/DOC_REVIEW.md diff --git a/tasks/fix-dashboard-read-state/IMPLEMENTATION.md b/tasks/complete/fix-dashboard-read-state/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-dashboard-read-state/IMPLEMENTATION.md rename to tasks/complete/fix-dashboard-read-state/IMPLEMENTATION.md diff --git a/tasks/fix-dashboard-read-state/SPEC.md b/tasks/complete/fix-dashboard-read-state/SPEC.md similarity index 100% rename from tasks/fix-dashboard-read-state/SPEC.md rename to tasks/complete/fix-dashboard-read-state/SPEC.md diff --git a/tasks/fix-dashboard-read-state/VERDICT.md b/tasks/complete/fix-dashboard-read-state/VERDICT.md similarity index 100% rename from tasks/fix-dashboard-read-state/VERDICT.md rename to tasks/complete/fix-dashboard-read-state/VERDICT.md diff --git a/tasks/fix-dead-end-phases/.state b/tasks/complete/fix-dead-end-phases/.state similarity index 100% rename from tasks/fix-dead-end-phases/.state rename to tasks/complete/fix-dead-end-phases/.state diff --git a/tasks/fix-dead-end-phases/.state.approvals b/tasks/complete/fix-dead-end-phases/.state.approvals similarity index 100% rename from tasks/fix-dead-end-phases/.state.approvals rename to tasks/complete/fix-dead-end-phases/.state.approvals diff --git a/tasks/fix-dead-end-phases/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-dead-end-phases/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-dead-end-phases/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-dead-end-phases/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-dead-end-phases/BUG_REPORT.md b/tasks/complete/fix-dead-end-phases/BUG_REPORT.md similarity index 100% rename from tasks/fix-dead-end-phases/BUG_REPORT.md rename to tasks/complete/fix-dead-end-phases/BUG_REPORT.md diff --git a/tasks/fix-dead-end-phases/DOC_REVIEW.md b/tasks/complete/fix-dead-end-phases/DOC_REVIEW.md similarity index 100% rename from tasks/fix-dead-end-phases/DOC_REVIEW.md rename to tasks/complete/fix-dead-end-phases/DOC_REVIEW.md diff --git a/tasks/fix-dead-end-phases/IMPLEMENTATION.md b/tasks/complete/fix-dead-end-phases/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-dead-end-phases/IMPLEMENTATION.md rename to tasks/complete/fix-dead-end-phases/IMPLEMENTATION.md diff --git a/tasks/fix-dead-end-phases/REVIEW.md b/tasks/complete/fix-dead-end-phases/REVIEW.md similarity index 100% rename from tasks/fix-dead-end-phases/REVIEW.md rename to tasks/complete/fix-dead-end-phases/REVIEW.md diff --git a/tasks/fix-dead-end-phases/SPEC.md b/tasks/complete/fix-dead-end-phases/SPEC.md similarity index 100% rename from tasks/fix-dead-end-phases/SPEC.md rename to tasks/complete/fix-dead-end-phases/SPEC.md diff --git a/tasks/fix-dead-end-phases/VERDICT.md b/tasks/complete/fix-dead-end-phases/VERDICT.md similarity index 100% rename from tasks/fix-dead-end-phases/VERDICT.md rename to tasks/complete/fix-dead-end-phases/VERDICT.md diff --git a/tasks/fix-guard-plugin-derailment/.state b/tasks/complete/fix-guard-plugin-derailment/.state similarity index 100% rename from tasks/fix-guard-plugin-derailment/.state rename to tasks/complete/fix-guard-plugin-derailment/.state diff --git a/tasks/fix-guard-plugin-derailment/.state.approvals b/tasks/complete/fix-guard-plugin-derailment/.state.approvals similarity index 100% rename from tasks/fix-guard-plugin-derailment/.state.approvals rename to tasks/complete/fix-guard-plugin-derailment/.state.approvals diff --git a/tasks/fix-guard-plugin-derailment/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-guard-plugin-derailment/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-guard-plugin-derailment/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-guard-plugin-derailment/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-guard-plugin-derailment/BUG_REPORT.md b/tasks/complete/fix-guard-plugin-derailment/BUG_REPORT.md similarity index 100% rename from tasks/fix-guard-plugin-derailment/BUG_REPORT.md rename to tasks/complete/fix-guard-plugin-derailment/BUG_REPORT.md diff --git a/tasks/fix-guard-plugin-derailment/DOC_REVIEW.md b/tasks/complete/fix-guard-plugin-derailment/DOC_REVIEW.md similarity index 100% rename from tasks/fix-guard-plugin-derailment/DOC_REVIEW.md rename to tasks/complete/fix-guard-plugin-derailment/DOC_REVIEW.md diff --git a/tasks/fix-guard-plugin-derailment/IMPLEMENTATION.md b/tasks/complete/fix-guard-plugin-derailment/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-guard-plugin-derailment/IMPLEMENTATION.md rename to tasks/complete/fix-guard-plugin-derailment/IMPLEMENTATION.md diff --git a/tasks/fix-guard-plugin-derailment/REVIEW.md b/tasks/complete/fix-guard-plugin-derailment/REVIEW.md similarity index 100% rename from tasks/fix-guard-plugin-derailment/REVIEW.md rename to tasks/complete/fix-guard-plugin-derailment/REVIEW.md diff --git a/tasks/fix-guard-plugin-derailment/SPEC.md b/tasks/complete/fix-guard-plugin-derailment/SPEC.md similarity index 100% rename from tasks/fix-guard-plugin-derailment/SPEC.md rename to tasks/complete/fix-guard-plugin-derailment/SPEC.md diff --git a/tasks/fix-guard-plugin-derailment/VERDICT.md b/tasks/complete/fix-guard-plugin-derailment/VERDICT.md similarity index 100% rename from tasks/fix-guard-plugin-derailment/VERDICT.md rename to tasks/complete/fix-guard-plugin-derailment/VERDICT.md diff --git a/tasks/fix-install-update-flow/.state b/tasks/complete/fix-install-update-flow/.state similarity index 100% rename from tasks/fix-install-update-flow/.state rename to tasks/complete/fix-install-update-flow/.state diff --git a/tasks/fix-install-update-flow/.state.approvals b/tasks/complete/fix-install-update-flow/.state.approvals similarity index 100% rename from tasks/fix-install-update-flow/.state.approvals rename to tasks/complete/fix-install-update-flow/.state.approvals diff --git a/tasks/fix-install-update-flow/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-install-update-flow/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-install-update-flow/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-install-update-flow/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-install-update-flow/BUG_REPORT.md b/tasks/complete/fix-install-update-flow/BUG_REPORT.md similarity index 100% rename from tasks/fix-install-update-flow/BUG_REPORT.md rename to tasks/complete/fix-install-update-flow/BUG_REPORT.md diff --git a/tasks/fix-install-update-flow/CODE_REVIEW.md b/tasks/complete/fix-install-update-flow/CODE_REVIEW.md similarity index 100% rename from tasks/fix-install-update-flow/CODE_REVIEW.md rename to tasks/complete/fix-install-update-flow/CODE_REVIEW.md diff --git a/tasks/fix-install-update-flow/DOC_REVIEW.md b/tasks/complete/fix-install-update-flow/DOC_REVIEW.md similarity index 100% rename from tasks/fix-install-update-flow/DOC_REVIEW.md rename to tasks/complete/fix-install-update-flow/DOC_REVIEW.md diff --git a/tasks/fix-install-update-flow/IMPLEMENTATION.md b/tasks/complete/fix-install-update-flow/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-install-update-flow/IMPLEMENTATION.md rename to tasks/complete/fix-install-update-flow/IMPLEMENTATION.md diff --git a/tasks/fix-install-update-flow/RESEARCH.md b/tasks/complete/fix-install-update-flow/RESEARCH.md similarity index 100% rename from tasks/fix-install-update-flow/RESEARCH.md rename to tasks/complete/fix-install-update-flow/RESEARCH.md diff --git a/tasks/fix-install-update-flow/SPEC.md b/tasks/complete/fix-install-update-flow/SPEC.md similarity index 100% rename from tasks/fix-install-update-flow/SPEC.md rename to tasks/complete/fix-install-update-flow/SPEC.md diff --git a/tasks/fix-install-update-flow/VERDICT.md b/tasks/complete/fix-install-update-flow/VERDICT.md similarity index 100% rename from tasks/fix-install-update-flow/VERDICT.md rename to tasks/complete/fix-install-update-flow/VERDICT.md diff --git a/tasks/fix-migrate-find-precedence/.state b/tasks/complete/fix-migrate-find-precedence/.state similarity index 100% rename from tasks/fix-migrate-find-precedence/.state rename to tasks/complete/fix-migrate-find-precedence/.state diff --git a/tasks/fix-migrate-find-precedence/.state.approvals b/tasks/complete/fix-migrate-find-precedence/.state.approvals similarity index 100% rename from tasks/fix-migrate-find-precedence/.state.approvals rename to tasks/complete/fix-migrate-find-precedence/.state.approvals diff --git a/tasks/fix-migrate-find-precedence/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-migrate-find-precedence/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-migrate-find-precedence/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-migrate-find-precedence/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-migrate-find-precedence/BUG_REPORT.md b/tasks/complete/fix-migrate-find-precedence/BUG_REPORT.md similarity index 100% rename from tasks/fix-migrate-find-precedence/BUG_REPORT.md rename to tasks/complete/fix-migrate-find-precedence/BUG_REPORT.md diff --git a/tasks/fix-migrate-find-precedence/CODE_REVIEW.md b/tasks/complete/fix-migrate-find-precedence/CODE_REVIEW.md similarity index 100% rename from tasks/fix-migrate-find-precedence/CODE_REVIEW.md rename to tasks/complete/fix-migrate-find-precedence/CODE_REVIEW.md diff --git a/tasks/fix-migrate-find-precedence/DOC_REVIEW.md b/tasks/complete/fix-migrate-find-precedence/DOC_REVIEW.md similarity index 100% rename from tasks/fix-migrate-find-precedence/DOC_REVIEW.md rename to tasks/complete/fix-migrate-find-precedence/DOC_REVIEW.md diff --git a/tasks/fix-migrate-find-precedence/IMPLEMENTATION.md b/tasks/complete/fix-migrate-find-precedence/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-migrate-find-precedence/IMPLEMENTATION.md rename to tasks/complete/fix-migrate-find-precedence/IMPLEMENTATION.md diff --git a/tasks/fix-migrate-find-precedence/SPEC.md b/tasks/complete/fix-migrate-find-precedence/SPEC.md similarity index 100% rename from tasks/fix-migrate-find-precedence/SPEC.md rename to tasks/complete/fix-migrate-find-precedence/SPEC.md diff --git a/tasks/fix-migrate-find-precedence/VERDICT.md b/tasks/complete/fix-migrate-find-precedence/VERDICT.md similarity index 100% rename from tasks/fix-migrate-find-precedence/VERDICT.md rename to tasks/complete/fix-migrate-find-precedence/VERDICT.md diff --git a/tasks/fix-prompt-consistency/.state b/tasks/complete/fix-prompt-consistency/.state similarity index 100% rename from tasks/fix-prompt-consistency/.state rename to tasks/complete/fix-prompt-consistency/.state diff --git a/tasks/fix-prompt-consistency/IMPLEMENTATION.md b/tasks/complete/fix-prompt-consistency/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-prompt-consistency/IMPLEMENTATION.md rename to tasks/complete/fix-prompt-consistency/IMPLEMENTATION.md diff --git a/tasks/fix-prompt-consistency/SPEC.md b/tasks/complete/fix-prompt-consistency/SPEC.md similarity index 100% rename from tasks/fix-prompt-consistency/SPEC.md rename to tasks/complete/fix-prompt-consistency/SPEC.md diff --git a/tasks/fix-prompt-consistency/VERDICT.md b/tasks/complete/fix-prompt-consistency/VERDICT.md similarity index 100% rename from tasks/fix-prompt-consistency/VERDICT.md rename to tasks/complete/fix-prompt-consistency/VERDICT.md diff --git a/tasks/fix-register-guards/.state b/tasks/complete/fix-register-guards/.state similarity index 100% rename from tasks/fix-register-guards/.state rename to tasks/complete/fix-register-guards/.state diff --git a/tasks/fix-register-guards/.state.approvals b/tasks/complete/fix-register-guards/.state.approvals similarity index 100% rename from tasks/fix-register-guards/.state.approvals rename to tasks/complete/fix-register-guards/.state.approvals diff --git a/tasks/fix-register-guards/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-register-guards/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-register-guards/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-register-guards/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-register-guards/BUG_REPORT.md b/tasks/complete/fix-register-guards/BUG_REPORT.md similarity index 100% rename from tasks/fix-register-guards/BUG_REPORT.md rename to tasks/complete/fix-register-guards/BUG_REPORT.md diff --git a/tasks/fix-register-guards/CODE_REVIEW.md b/tasks/complete/fix-register-guards/CODE_REVIEW.md similarity index 100% rename from tasks/fix-register-guards/CODE_REVIEW.md rename to tasks/complete/fix-register-guards/CODE_REVIEW.md diff --git a/tasks/fix-register-guards/DOC_REVIEW.md b/tasks/complete/fix-register-guards/DOC_REVIEW.md similarity index 100% rename from tasks/fix-register-guards/DOC_REVIEW.md rename to tasks/complete/fix-register-guards/DOC_REVIEW.md diff --git a/tasks/fix-register-guards/IMPLEMENTATION.md b/tasks/complete/fix-register-guards/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-register-guards/IMPLEMENTATION.md rename to tasks/complete/fix-register-guards/IMPLEMENTATION.md diff --git a/tasks/fix-register-guards/SPEC.md b/tasks/complete/fix-register-guards/SPEC.md similarity index 100% rename from tasks/fix-register-guards/SPEC.md rename to tasks/complete/fix-register-guards/SPEC.md diff --git a/tasks/fix-register-guards/VERDICT.md b/tasks/complete/fix-register-guards/VERDICT.md similarity index 100% rename from tasks/fix-register-guards/VERDICT.md rename to tasks/complete/fix-register-guards/VERDICT.md diff --git a/tasks/fix-stale-task-mtime-proxy/.state b/tasks/complete/fix-stale-task-mtime-proxy/.state similarity index 100% rename from tasks/fix-stale-task-mtime-proxy/.state rename to tasks/complete/fix-stale-task-mtime-proxy/.state diff --git a/tasks/fix-stale-task-mtime-proxy/.state.approvals b/tasks/complete/fix-stale-task-mtime-proxy/.state.approvals similarity index 100% rename from tasks/fix-stale-task-mtime-proxy/.state.approvals rename to tasks/complete/fix-stale-task-mtime-proxy/.state.approvals diff --git a/tasks/fix-stale-task-mtime-proxy/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-stale-task-mtime-proxy/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-stale-task-mtime-proxy/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-stale-task-mtime-proxy/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-stale-task-mtime-proxy/BUG_REPORT.md b/tasks/complete/fix-stale-task-mtime-proxy/BUG_REPORT.md similarity index 100% rename from tasks/fix-stale-task-mtime-proxy/BUG_REPORT.md rename to tasks/complete/fix-stale-task-mtime-proxy/BUG_REPORT.md diff --git a/tasks/fix-stale-task-mtime-proxy/CODE_REVIEW.md b/tasks/complete/fix-stale-task-mtime-proxy/CODE_REVIEW.md similarity index 100% rename from tasks/fix-stale-task-mtime-proxy/CODE_REVIEW.md rename to tasks/complete/fix-stale-task-mtime-proxy/CODE_REVIEW.md diff --git a/tasks/fix-stale-task-mtime-proxy/DOC_REVIEW.md b/tasks/complete/fix-stale-task-mtime-proxy/DOC_REVIEW.md similarity index 100% rename from tasks/fix-stale-task-mtime-proxy/DOC_REVIEW.md rename to tasks/complete/fix-stale-task-mtime-proxy/DOC_REVIEW.md diff --git a/tasks/fix-stale-task-mtime-proxy/IMPLEMENTATION.md b/tasks/complete/fix-stale-task-mtime-proxy/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-stale-task-mtime-proxy/IMPLEMENTATION.md rename to tasks/complete/fix-stale-task-mtime-proxy/IMPLEMENTATION.md diff --git a/tasks/fix-stale-task-mtime-proxy/SPEC.md b/tasks/complete/fix-stale-task-mtime-proxy/SPEC.md similarity index 100% rename from tasks/fix-stale-task-mtime-proxy/SPEC.md rename to tasks/complete/fix-stale-task-mtime-proxy/SPEC.md diff --git a/tasks/fix-stale-task-mtime-proxy/VERDICT.md b/tasks/complete/fix-stale-task-mtime-proxy/VERDICT.md similarity index 100% rename from tasks/fix-stale-task-mtime-proxy/VERDICT.md rename to tasks/complete/fix-stale-task-mtime-proxy/VERDICT.md diff --git a/tasks/fix-status-script-bugs/.state b/tasks/complete/fix-status-script-bugs/.state similarity index 100% rename from tasks/fix-status-script-bugs/.state rename to tasks/complete/fix-status-script-bugs/.state diff --git a/tasks/fix-status-script-bugs/.state.approvals b/tasks/complete/fix-status-script-bugs/.state.approvals similarity index 100% rename from tasks/fix-status-script-bugs/.state.approvals rename to tasks/complete/fix-status-script-bugs/.state.approvals diff --git a/tasks/fix-status-script-bugs/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-status-script-bugs/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-status-script-bugs/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-status-script-bugs/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-status-script-bugs/BUG_REPORT.md b/tasks/complete/fix-status-script-bugs/BUG_REPORT.md similarity index 100% rename from tasks/fix-status-script-bugs/BUG_REPORT.md rename to tasks/complete/fix-status-script-bugs/BUG_REPORT.md diff --git a/tasks/fix-status-script-bugs/DOC_REVIEW.md b/tasks/complete/fix-status-script-bugs/DOC_REVIEW.md similarity index 100% rename from tasks/fix-status-script-bugs/DOC_REVIEW.md rename to tasks/complete/fix-status-script-bugs/DOC_REVIEW.md diff --git a/tasks/fix-status-script-bugs/IMPLEMENTATION.md b/tasks/complete/fix-status-script-bugs/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-status-script-bugs/IMPLEMENTATION.md rename to tasks/complete/fix-status-script-bugs/IMPLEMENTATION.md diff --git a/tasks/fix-status-script-bugs/REVIEW.md b/tasks/complete/fix-status-script-bugs/REVIEW.md similarity index 100% rename from tasks/fix-status-script-bugs/REVIEW.md rename to tasks/complete/fix-status-script-bugs/REVIEW.md diff --git a/tasks/fix-status-script-bugs/SPEC.md b/tasks/complete/fix-status-script-bugs/SPEC.md similarity index 100% rename from tasks/fix-status-script-bugs/SPEC.md rename to tasks/complete/fix-status-script-bugs/SPEC.md diff --git a/tasks/fix-status-script-bugs/VERDICT.md b/tasks/complete/fix-status-script-bugs/VERDICT.md similarity index 100% rename from tasks/fix-status-script-bugs/VERDICT.md rename to tasks/complete/fix-status-script-bugs/VERDICT.md diff --git a/tasks/fix-test-plan-phase-mapping/.state b/tasks/complete/fix-test-plan-phase-mapping/.state similarity index 100% rename from tasks/fix-test-plan-phase-mapping/.state rename to tasks/complete/fix-test-plan-phase-mapping/.state diff --git a/tasks/fix-test-plan-phase-mapping/.state.approvals b/tasks/complete/fix-test-plan-phase-mapping/.state.approvals similarity index 100% rename from tasks/fix-test-plan-phase-mapping/.state.approvals rename to tasks/complete/fix-test-plan-phase-mapping/.state.approvals diff --git a/tasks/fix-test-plan-phase-mapping/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-test-plan-phase-mapping/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-test-plan-phase-mapping/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-test-plan-phase-mapping/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-test-plan-phase-mapping/BUG_REPORT.md b/tasks/complete/fix-test-plan-phase-mapping/BUG_REPORT.md similarity index 100% rename from tasks/fix-test-plan-phase-mapping/BUG_REPORT.md rename to tasks/complete/fix-test-plan-phase-mapping/BUG_REPORT.md diff --git a/tasks/fix-test-plan-phase-mapping/CODE_REVIEW.md b/tasks/complete/fix-test-plan-phase-mapping/CODE_REVIEW.md similarity index 100% rename from tasks/fix-test-plan-phase-mapping/CODE_REVIEW.md rename to tasks/complete/fix-test-plan-phase-mapping/CODE_REVIEW.md diff --git a/tasks/fix-test-plan-phase-mapping/DOC_REVIEW.md b/tasks/complete/fix-test-plan-phase-mapping/DOC_REVIEW.md similarity index 100% rename from tasks/fix-test-plan-phase-mapping/DOC_REVIEW.md rename to tasks/complete/fix-test-plan-phase-mapping/DOC_REVIEW.md diff --git a/tasks/fix-test-plan-phase-mapping/IMPLEMENTATION.md b/tasks/complete/fix-test-plan-phase-mapping/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-test-plan-phase-mapping/IMPLEMENTATION.md rename to tasks/complete/fix-test-plan-phase-mapping/IMPLEMENTATION.md diff --git a/tasks/fix-test-plan-phase-mapping/SPEC.md b/tasks/complete/fix-test-plan-phase-mapping/SPEC.md similarity index 100% rename from tasks/fix-test-plan-phase-mapping/SPEC.md rename to tasks/complete/fix-test-plan-phase-mapping/SPEC.md diff --git a/tasks/fix-test-plan-phase-mapping/VERDICT.md b/tasks/complete/fix-test-plan-phase-mapping/VERDICT.md similarity index 100% rename from tasks/fix-test-plan-phase-mapping/VERDICT.md rename to tasks/complete/fix-test-plan-phase-mapping/VERDICT.md diff --git a/tasks/fix-verdict-parsing-fallback/.state b/tasks/complete/fix-verdict-parsing-fallback/.state similarity index 100% rename from tasks/fix-verdict-parsing-fallback/.state rename to tasks/complete/fix-verdict-parsing-fallback/.state diff --git a/tasks/fix-verdict-parsing-fallback/.state.approvals b/tasks/complete/fix-verdict-parsing-fallback/.state.approvals similarity index 100% rename from tasks/fix-verdict-parsing-fallback/.state.approvals rename to tasks/complete/fix-verdict-parsing-fallback/.state.approvals diff --git a/tasks/fix-verdict-parsing-fallback/ADVERSARIAL_BUG_FIND.md b/tasks/complete/fix-verdict-parsing-fallback/ADVERSARIAL_BUG_FIND.md similarity index 100% rename from tasks/fix-verdict-parsing-fallback/ADVERSARIAL_BUG_FIND.md rename to tasks/complete/fix-verdict-parsing-fallback/ADVERSARIAL_BUG_FIND.md diff --git a/tasks/fix-verdict-parsing-fallback/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-verdict-parsing-fallback/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-verdict-parsing-fallback/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-verdict-parsing-fallback/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-verdict-parsing-fallback/BUG_FIND.md b/tasks/complete/fix-verdict-parsing-fallback/BUG_FIND.md similarity index 100% rename from tasks/fix-verdict-parsing-fallback/BUG_FIND.md rename to tasks/complete/fix-verdict-parsing-fallback/BUG_FIND.md diff --git a/tasks/fix-verdict-parsing-fallback/BUG_REPORT.md b/tasks/complete/fix-verdict-parsing-fallback/BUG_REPORT.md similarity index 100% rename from tasks/fix-verdict-parsing-fallback/BUG_REPORT.md rename to tasks/complete/fix-verdict-parsing-fallback/BUG_REPORT.md diff --git a/tasks/fix-verdict-parsing-fallback/DOC_REVIEW.md b/tasks/complete/fix-verdict-parsing-fallback/DOC_REVIEW.md similarity index 100% rename from tasks/fix-verdict-parsing-fallback/DOC_REVIEW.md rename to tasks/complete/fix-verdict-parsing-fallback/DOC_REVIEW.md diff --git a/tasks/fix-verdict-parsing-fallback/IMPLEMENTATION.md b/tasks/complete/fix-verdict-parsing-fallback/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-verdict-parsing-fallback/IMPLEMENTATION.md rename to tasks/complete/fix-verdict-parsing-fallback/IMPLEMENTATION.md diff --git a/tasks/fix-verdict-parsing-fallback/REFEREE.md b/tasks/complete/fix-verdict-parsing-fallback/REFEREE.md similarity index 100% rename from tasks/fix-verdict-parsing-fallback/REFEREE.md rename to tasks/complete/fix-verdict-parsing-fallback/REFEREE.md diff --git a/tasks/fix-verdict-parsing-fallback/SPEC.md b/tasks/complete/fix-verdict-parsing-fallback/SPEC.md similarity index 100% rename from tasks/fix-verdict-parsing-fallback/SPEC.md rename to tasks/complete/fix-verdict-parsing-fallback/SPEC.md diff --git a/tasks/fix-verdict-parsing-fallback/VERDICT.md b/tasks/complete/fix-verdict-parsing-fallback/VERDICT.md similarity index 100% rename from tasks/fix-verdict-parsing-fallback/VERDICT.md rename to tasks/complete/fix-verdict-parsing-fallback/VERDICT.md diff --git a/tasks/fix-verdict-parsing/.state b/tasks/complete/fix-verdict-parsing/.state similarity index 100% rename from tasks/fix-verdict-parsing/.state rename to tasks/complete/fix-verdict-parsing/.state diff --git a/tasks/fix-verdict-parsing/BUG_REPORT.md b/tasks/complete/fix-verdict-parsing/BUG_REPORT.md similarity index 100% rename from tasks/fix-verdict-parsing/BUG_REPORT.md rename to tasks/complete/fix-verdict-parsing/BUG_REPORT.md diff --git a/tasks/fix-verdict-parsing/DOC_REVIEW.md b/tasks/complete/fix-verdict-parsing/DOC_REVIEW.md similarity index 100% rename from tasks/fix-verdict-parsing/DOC_REVIEW.md rename to tasks/complete/fix-verdict-parsing/DOC_REVIEW.md diff --git a/tasks/fix-verdict-parsing/IMPLEMENTATION.md b/tasks/complete/fix-verdict-parsing/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-verdict-parsing/IMPLEMENTATION.md rename to tasks/complete/fix-verdict-parsing/IMPLEMENTATION.md diff --git a/tasks/fix-verdict-parsing/REVIEW.md b/tasks/complete/fix-verdict-parsing/REVIEW.md similarity index 100% rename from tasks/fix-verdict-parsing/REVIEW.md rename to tasks/complete/fix-verdict-parsing/REVIEW.md diff --git a/tasks/fix-verdict-parsing/SPEC.md b/tasks/complete/fix-verdict-parsing/SPEC.md similarity index 100% rename from tasks/fix-verdict-parsing/SPEC.md rename to tasks/complete/fix-verdict-parsing/SPEC.md diff --git a/tasks/fix-verdict-parsing/VERDICT.md b/tasks/complete/fix-verdict-parsing/VERDICT.md similarity index 100% rename from tasks/fix-verdict-parsing/VERDICT.md rename to tasks/complete/fix-verdict-parsing/VERDICT.md diff --git a/tasks/fix-verdict-pass-inference/.state b/tasks/complete/fix-verdict-pass-inference/.state similarity index 100% rename from tasks/fix-verdict-pass-inference/.state rename to tasks/complete/fix-verdict-pass-inference/.state diff --git a/tasks/fix-verdict-pass-inference/.state.approvals b/tasks/complete/fix-verdict-pass-inference/.state.approvals similarity index 100% rename from tasks/fix-verdict-pass-inference/.state.approvals rename to tasks/complete/fix-verdict-pass-inference/.state.approvals diff --git a/tasks/fix-verdict-pass-inference/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-verdict-pass-inference/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-verdict-pass-inference/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-verdict-pass-inference/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-verdict-pass-inference/BUG_REPORT.md b/tasks/complete/fix-verdict-pass-inference/BUG_REPORT.md similarity index 100% rename from tasks/fix-verdict-pass-inference/BUG_REPORT.md rename to tasks/complete/fix-verdict-pass-inference/BUG_REPORT.md diff --git a/tasks/fix-verdict-pass-inference/CODE_REVIEW.md b/tasks/complete/fix-verdict-pass-inference/CODE_REVIEW.md similarity index 100% rename from tasks/fix-verdict-pass-inference/CODE_REVIEW.md rename to tasks/complete/fix-verdict-pass-inference/CODE_REVIEW.md diff --git a/tasks/fix-verdict-pass-inference/DOC_REVIEW.md b/tasks/complete/fix-verdict-pass-inference/DOC_REVIEW.md similarity index 100% rename from tasks/fix-verdict-pass-inference/DOC_REVIEW.md rename to tasks/complete/fix-verdict-pass-inference/DOC_REVIEW.md diff --git a/tasks/fix-verdict-pass-inference/IMPLEMENTATION.md b/tasks/complete/fix-verdict-pass-inference/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-verdict-pass-inference/IMPLEMENTATION.md rename to tasks/complete/fix-verdict-pass-inference/IMPLEMENTATION.md diff --git a/tasks/fix-verdict-pass-inference/SPEC.md b/tasks/complete/fix-verdict-pass-inference/SPEC.md similarity index 100% rename from tasks/fix-verdict-pass-inference/SPEC.md rename to tasks/complete/fix-verdict-pass-inference/SPEC.md diff --git a/tasks/fix-verdict-pass-inference/VERDICT.md b/tasks/complete/fix-verdict-pass-inference/VERDICT.md similarity index 100% rename from tasks/fix-verdict-pass-inference/VERDICT.md rename to tasks/complete/fix-verdict-pass-inference/VERDICT.md diff --git a/tasks/fix-vram-model-prefix-match/.state b/tasks/complete/fix-vram-model-prefix-match/.state similarity index 100% rename from tasks/fix-vram-model-prefix-match/.state rename to tasks/complete/fix-vram-model-prefix-match/.state diff --git a/tasks/fix-vram-model-prefix-match/.state.approvals b/tasks/complete/fix-vram-model-prefix-match/.state.approvals similarity index 100% rename from tasks/fix-vram-model-prefix-match/.state.approvals rename to tasks/complete/fix-vram-model-prefix-match/.state.approvals diff --git a/tasks/fix-vram-model-prefix-match/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/fix-vram-model-prefix-match/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/fix-vram-model-prefix-match/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/fix-vram-model-prefix-match/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/fix-vram-model-prefix-match/BUG_REPORT.md b/tasks/complete/fix-vram-model-prefix-match/BUG_REPORT.md similarity index 100% rename from tasks/fix-vram-model-prefix-match/BUG_REPORT.md rename to tasks/complete/fix-vram-model-prefix-match/BUG_REPORT.md diff --git a/tasks/fix-vram-model-prefix-match/CODE_REVIEW.md b/tasks/complete/fix-vram-model-prefix-match/CODE_REVIEW.md similarity index 100% rename from tasks/fix-vram-model-prefix-match/CODE_REVIEW.md rename to tasks/complete/fix-vram-model-prefix-match/CODE_REVIEW.md diff --git a/tasks/fix-vram-model-prefix-match/DOC_REVIEW.md b/tasks/complete/fix-vram-model-prefix-match/DOC_REVIEW.md similarity index 100% rename from tasks/fix-vram-model-prefix-match/DOC_REVIEW.md rename to tasks/complete/fix-vram-model-prefix-match/DOC_REVIEW.md diff --git a/tasks/fix-vram-model-prefix-match/IMPLEMENTATION.md b/tasks/complete/fix-vram-model-prefix-match/IMPLEMENTATION.md similarity index 100% rename from tasks/fix-vram-model-prefix-match/IMPLEMENTATION.md rename to tasks/complete/fix-vram-model-prefix-match/IMPLEMENTATION.md diff --git a/tasks/fix-vram-model-prefix-match/SPEC.md b/tasks/complete/fix-vram-model-prefix-match/SPEC.md similarity index 100% rename from tasks/fix-vram-model-prefix-match/SPEC.md rename to tasks/complete/fix-vram-model-prefix-match/SPEC.md diff --git a/tasks/fix-vram-model-prefix-match/VERDICT.md b/tasks/complete/fix-vram-model-prefix-match/VERDICT.md similarity index 100% rename from tasks/fix-vram-model-prefix-match/VERDICT.md rename to tasks/complete/fix-vram-model-prefix-match/VERDICT.md diff --git a/tasks/framework-audit/.state b/tasks/complete/framework-audit/.state similarity index 100% rename from tasks/framework-audit/.state rename to tasks/complete/framework-audit/.state diff --git a/tasks/framework-audit/BUG_REPORT.md b/tasks/complete/framework-audit/BUG_REPORT.md similarity index 100% rename from tasks/framework-audit/BUG_REPORT.md rename to tasks/complete/framework-audit/BUG_REPORT.md diff --git a/tasks/framework-audit/DOC_REVIEW.md b/tasks/complete/framework-audit/DOC_REVIEW.md similarity index 100% rename from tasks/framework-audit/DOC_REVIEW.md rename to tasks/complete/framework-audit/DOC_REVIEW.md diff --git a/tasks/framework-audit/RESEARCH.md b/tasks/complete/framework-audit/RESEARCH.md similarity index 100% rename from tasks/framework-audit/RESEARCH.md rename to tasks/complete/framework-audit/RESEARCH.md diff --git a/tasks/framework-audit/REVIEW.md b/tasks/complete/framework-audit/REVIEW.md similarity index 100% rename from tasks/framework-audit/REVIEW.md rename to tasks/complete/framework-audit/REVIEW.md diff --git a/tasks/framework-audit/SPEC.md b/tasks/complete/framework-audit/SPEC.md similarity index 100% rename from tasks/framework-audit/SPEC.md rename to tasks/complete/framework-audit/SPEC.md diff --git a/tasks/framework-audit/VERDICT.md b/tasks/complete/framework-audit/VERDICT.md similarity index 100% rename from tasks/framework-audit/VERDICT.md rename to tasks/complete/framework-audit/VERDICT.md diff --git a/tasks/framework-self-consistency-tests/.state b/tasks/complete/framework-self-consistency-tests/.state similarity index 100% rename from tasks/framework-self-consistency-tests/.state rename to tasks/complete/framework-self-consistency-tests/.state diff --git a/tasks/framework-self-consistency-tests/IMPLEMENTATION.md b/tasks/complete/framework-self-consistency-tests/IMPLEMENTATION.md similarity index 100% rename from tasks/framework-self-consistency-tests/IMPLEMENTATION.md rename to tasks/complete/framework-self-consistency-tests/IMPLEMENTATION.md diff --git a/tasks/framework-self-consistency-tests/REVIEW.md b/tasks/complete/framework-self-consistency-tests/REVIEW.md similarity index 100% rename from tasks/framework-self-consistency-tests/REVIEW.md rename to tasks/complete/framework-self-consistency-tests/REVIEW.md diff --git a/tasks/framework-self-consistency-tests/SPEC.md b/tasks/complete/framework-self-consistency-tests/SPEC.md similarity index 100% rename from tasks/framework-self-consistency-tests/SPEC.md rename to tasks/complete/framework-self-consistency-tests/SPEC.md diff --git a/tasks/framework-self-consistency-tests/VERDICT.md b/tasks/complete/framework-self-consistency-tests/VERDICT.md similarity index 100% rename from tasks/framework-self-consistency-tests/VERDICT.md rename to tasks/complete/framework-self-consistency-tests/VERDICT.md diff --git a/tasks/framework-self-enforcement/.state b/tasks/complete/framework-self-enforcement/.state similarity index 100% rename from tasks/framework-self-enforcement/.state rename to tasks/complete/framework-self-enforcement/.state diff --git a/tasks/framework-self-enforcement/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/framework-self-enforcement/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/framework-self-enforcement/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/framework-self-enforcement/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/framework-self-enforcement/BUG_REPORT.md b/tasks/complete/framework-self-enforcement/BUG_REPORT.md similarity index 100% rename from tasks/framework-self-enforcement/BUG_REPORT.md rename to tasks/complete/framework-self-enforcement/BUG_REPORT.md diff --git a/tasks/framework-self-enforcement/DOC_REVIEW.md b/tasks/complete/framework-self-enforcement/DOC_REVIEW.md similarity index 100% rename from tasks/framework-self-enforcement/DOC_REVIEW.md rename to tasks/complete/framework-self-enforcement/DOC_REVIEW.md diff --git a/tasks/framework-self-enforcement/IMPLEMENTATION.md b/tasks/complete/framework-self-enforcement/IMPLEMENTATION.md similarity index 100% rename from tasks/framework-self-enforcement/IMPLEMENTATION.md rename to tasks/complete/framework-self-enforcement/IMPLEMENTATION.md diff --git a/tasks/framework-self-enforcement/REVIEW.md b/tasks/complete/framework-self-enforcement/REVIEW.md similarity index 100% rename from tasks/framework-self-enforcement/REVIEW.md rename to tasks/complete/framework-self-enforcement/REVIEW.md diff --git a/tasks/framework-self-enforcement/SPEC.md b/tasks/complete/framework-self-enforcement/SPEC.md similarity index 100% rename from tasks/framework-self-enforcement/SPEC.md rename to tasks/complete/framework-self-enforcement/SPEC.md diff --git a/tasks/framework-self-enforcement/VERDICT.md b/tasks/complete/framework-self-enforcement/VERDICT.md similarity index 100% rename from tasks/framework-self-enforcement/VERDICT.md rename to tasks/complete/framework-self-enforcement/VERDICT.md diff --git a/tasks/harden-dashboard-security-scripts/.state b/tasks/complete/harden-dashboard-security-scripts/.state similarity index 100% rename from tasks/harden-dashboard-security-scripts/.state rename to tasks/complete/harden-dashboard-security-scripts/.state diff --git a/tasks/harden-dashboard-security-scripts/IMPLEMENTATION.md b/tasks/complete/harden-dashboard-security-scripts/IMPLEMENTATION.md similarity index 100% rename from tasks/harden-dashboard-security-scripts/IMPLEMENTATION.md rename to tasks/complete/harden-dashboard-security-scripts/IMPLEMENTATION.md diff --git a/tasks/harden-dashboard-security-scripts/REVIEW.md b/tasks/complete/harden-dashboard-security-scripts/REVIEW.md similarity index 100% rename from tasks/harden-dashboard-security-scripts/REVIEW.md rename to tasks/complete/harden-dashboard-security-scripts/REVIEW.md diff --git a/tasks/harden-dashboard-security-scripts/SPEC.md b/tasks/complete/harden-dashboard-security-scripts/SPEC.md similarity index 100% rename from tasks/harden-dashboard-security-scripts/SPEC.md rename to tasks/complete/harden-dashboard-security-scripts/SPEC.md diff --git a/tasks/harden-dashboard-security-scripts/VERDICT.md b/tasks/complete/harden-dashboard-security-scripts/VERDICT.md similarity index 100% rename from tasks/harden-dashboard-security-scripts/VERDICT.md rename to tasks/complete/harden-dashboard-security-scripts/VERDICT.md diff --git a/tasks/harden-dashboard-security/.state b/tasks/complete/harden-dashboard-security/.state similarity index 100% rename from tasks/harden-dashboard-security/.state rename to tasks/complete/harden-dashboard-security/.state diff --git a/tasks/harden-dashboard-security/IMPLEMENTATION.md b/tasks/complete/harden-dashboard-security/IMPLEMENTATION.md similarity index 100% rename from tasks/harden-dashboard-security/IMPLEMENTATION.md rename to tasks/complete/harden-dashboard-security/IMPLEMENTATION.md diff --git a/tasks/harden-dashboard-security/SPEC.md b/tasks/complete/harden-dashboard-security/SPEC.md similarity index 100% rename from tasks/harden-dashboard-security/SPEC.md rename to tasks/complete/harden-dashboard-security/SPEC.md diff --git a/tasks/harden-dashboard-security/VERDICT.md b/tasks/complete/harden-dashboard-security/VERDICT.md similarity index 100% rename from tasks/harden-dashboard-security/VERDICT.md rename to tasks/complete/harden-dashboard-security/VERDICT.md diff --git a/tasks/harden-enforcement-layers/.state b/tasks/complete/harden-enforcement-layers/.state similarity index 100% rename from tasks/harden-enforcement-layers/.state rename to tasks/complete/harden-enforcement-layers/.state diff --git a/tasks/harden-enforcement-layers/.state.approvals b/tasks/complete/harden-enforcement-layers/.state.approvals similarity index 100% rename from tasks/harden-enforcement-layers/.state.approvals rename to tasks/complete/harden-enforcement-layers/.state.approvals diff --git a/tasks/harden-enforcement-layers/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/harden-enforcement-layers/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/harden-enforcement-layers/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/harden-enforcement-layers/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/harden-enforcement-layers/BUG_REPORT.md b/tasks/complete/harden-enforcement-layers/BUG_REPORT.md similarity index 100% rename from tasks/harden-enforcement-layers/BUG_REPORT.md rename to tasks/complete/harden-enforcement-layers/BUG_REPORT.md diff --git a/tasks/harden-enforcement-layers/DOC_REVIEW.md b/tasks/complete/harden-enforcement-layers/DOC_REVIEW.md similarity index 100% rename from tasks/harden-enforcement-layers/DOC_REVIEW.md rename to tasks/complete/harden-enforcement-layers/DOC_REVIEW.md diff --git a/tasks/harden-enforcement-layers/IMPLEMENTATION.md b/tasks/complete/harden-enforcement-layers/IMPLEMENTATION.md similarity index 100% rename from tasks/harden-enforcement-layers/IMPLEMENTATION.md rename to tasks/complete/harden-enforcement-layers/IMPLEMENTATION.md diff --git a/tasks/harden-enforcement-layers/SPEC.md b/tasks/complete/harden-enforcement-layers/SPEC.md similarity index 100% rename from tasks/harden-enforcement-layers/SPEC.md rename to tasks/complete/harden-enforcement-layers/SPEC.md diff --git a/tasks/harden-enforcement-layers/VERDICT.md b/tasks/complete/harden-enforcement-layers/VERDICT.md similarity index 100% rename from tasks/harden-enforcement-layers/VERDICT.md rename to tasks/complete/harden-enforcement-layers/VERDICT.md diff --git a/tasks/hook-install-process/.state b/tasks/complete/hook-install-process/.state similarity index 100% rename from tasks/hook-install-process/.state rename to tasks/complete/hook-install-process/.state diff --git a/tasks/hook-install-process/.state.approvals b/tasks/complete/hook-install-process/.state.approvals similarity index 100% rename from tasks/hook-install-process/.state.approvals rename to tasks/complete/hook-install-process/.state.approvals diff --git a/tasks/hook-install-process/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/hook-install-process/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/hook-install-process/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/hook-install-process/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/hook-install-process/BUG_REPORT.md b/tasks/complete/hook-install-process/BUG_REPORT.md similarity index 100% rename from tasks/hook-install-process/BUG_REPORT.md rename to tasks/complete/hook-install-process/BUG_REPORT.md diff --git a/tasks/hook-install-process/DOC_REVIEW.md b/tasks/complete/hook-install-process/DOC_REVIEW.md similarity index 100% rename from tasks/hook-install-process/DOC_REVIEW.md rename to tasks/complete/hook-install-process/DOC_REVIEW.md diff --git a/tasks/hook-install-process/IMPLEMENTATION.md b/tasks/complete/hook-install-process/IMPLEMENTATION.md similarity index 100% rename from tasks/hook-install-process/IMPLEMENTATION.md rename to tasks/complete/hook-install-process/IMPLEMENTATION.md diff --git a/tasks/hook-install-process/SPEC.md b/tasks/complete/hook-install-process/SPEC.md similarity index 100% rename from tasks/hook-install-process/SPEC.md rename to tasks/complete/hook-install-process/SPEC.md diff --git a/tasks/hook-install-process/VERDICT.md b/tasks/complete/hook-install-process/VERDICT.md similarity index 100% rename from tasks/hook-install-process/VERDICT.md rename to tasks/complete/hook-install-process/VERDICT.md diff --git a/tasks/implement-autopilot-runtime/.state b/tasks/complete/implement-autopilot-runtime/.state similarity index 100% rename from tasks/implement-autopilot-runtime/.state rename to tasks/complete/implement-autopilot-runtime/.state diff --git a/tasks/implement-autopilot-runtime/.state.approvals b/tasks/complete/implement-autopilot-runtime/.state.approvals similarity index 100% rename from tasks/implement-autopilot-runtime/.state.approvals rename to tasks/complete/implement-autopilot-runtime/.state.approvals diff --git a/tasks/implement-autopilot-runtime/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/implement-autopilot-runtime/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/implement-autopilot-runtime/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/implement-autopilot-runtime/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/implement-autopilot-runtime/BUG_REPORT.md b/tasks/complete/implement-autopilot-runtime/BUG_REPORT.md similarity index 100% rename from tasks/implement-autopilot-runtime/BUG_REPORT.md rename to tasks/complete/implement-autopilot-runtime/BUG_REPORT.md diff --git a/tasks/implement-autopilot-runtime/DOC_REVIEW.md b/tasks/complete/implement-autopilot-runtime/DOC_REVIEW.md similarity index 100% rename from tasks/implement-autopilot-runtime/DOC_REVIEW.md rename to tasks/complete/implement-autopilot-runtime/DOC_REVIEW.md diff --git a/tasks/implement-autopilot-runtime/IMPLEMENTATION.md b/tasks/complete/implement-autopilot-runtime/IMPLEMENTATION.md similarity index 100% rename from tasks/implement-autopilot-runtime/IMPLEMENTATION.md rename to tasks/complete/implement-autopilot-runtime/IMPLEMENTATION.md diff --git a/tasks/implement-autopilot-runtime/REVIEW.md b/tasks/complete/implement-autopilot-runtime/REVIEW.md similarity index 100% rename from tasks/implement-autopilot-runtime/REVIEW.md rename to tasks/complete/implement-autopilot-runtime/REVIEW.md diff --git a/tasks/implement-autopilot-runtime/SPEC.md b/tasks/complete/implement-autopilot-runtime/SPEC.md similarity index 100% rename from tasks/implement-autopilot-runtime/SPEC.md rename to tasks/complete/implement-autopilot-runtime/SPEC.md diff --git a/tasks/implement-autopilot-runtime/VERDICT.md b/tasks/complete/implement-autopilot-runtime/VERDICT.md similarity index 100% rename from tasks/implement-autopilot-runtime/VERDICT.md rename to tasks/complete/implement-autopilot-runtime/VERDICT.md diff --git a/tasks/implement-category-3-audit/.state b/tasks/complete/implement-category-3-audit/.state similarity index 100% rename from tasks/implement-category-3-audit/.state rename to tasks/complete/implement-category-3-audit/.state diff --git a/tasks/implement-category-3-audit/.state.approvals b/tasks/complete/implement-category-3-audit/.state.approvals similarity index 100% rename from tasks/implement-category-3-audit/.state.approvals rename to tasks/complete/implement-category-3-audit/.state.approvals diff --git a/tasks/implement-category-3-audit/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/implement-category-3-audit/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/implement-category-3-audit/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/implement-category-3-audit/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/implement-category-3-audit/BUG_REPORT.md b/tasks/complete/implement-category-3-audit/BUG_REPORT.md similarity index 100% rename from tasks/implement-category-3-audit/BUG_REPORT.md rename to tasks/complete/implement-category-3-audit/BUG_REPORT.md diff --git a/tasks/implement-category-3-audit/DOC_REVIEW.md b/tasks/complete/implement-category-3-audit/DOC_REVIEW.md similarity index 100% rename from tasks/implement-category-3-audit/DOC_REVIEW.md rename to tasks/complete/implement-category-3-audit/DOC_REVIEW.md diff --git a/tasks/implement-category-3-audit/IMPLEMENTATION.md b/tasks/complete/implement-category-3-audit/IMPLEMENTATION.md similarity index 100% rename from tasks/implement-category-3-audit/IMPLEMENTATION.md rename to tasks/complete/implement-category-3-audit/IMPLEMENTATION.md diff --git a/tasks/implement-category-3-audit/REVIEW.md b/tasks/complete/implement-category-3-audit/REVIEW.md similarity index 100% rename from tasks/implement-category-3-audit/REVIEW.md rename to tasks/complete/implement-category-3-audit/REVIEW.md diff --git a/tasks/implement-category-3-audit/SPEC.md b/tasks/complete/implement-category-3-audit/SPEC.md similarity index 100% rename from tasks/implement-category-3-audit/SPEC.md rename to tasks/complete/implement-category-3-audit/SPEC.md diff --git a/tasks/implement-category-3-audit/VERDICT.md b/tasks/complete/implement-category-3-audit/VERDICT.md similarity index 100% rename from tasks/implement-category-3-audit/VERDICT.md rename to tasks/complete/implement-category-3-audit/VERDICT.md diff --git a/tasks/implement-task/.state b/tasks/complete/implement-task/.state similarity index 100% rename from tasks/implement-task/.state rename to tasks/complete/implement-task/.state diff --git a/tasks/implement-task/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/implement-task/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/implement-task/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/implement-task/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/implement-task/BUG_REPORT.md b/tasks/complete/implement-task/BUG_REPORT.md similarity index 100% rename from tasks/implement-task/BUG_REPORT.md rename to tasks/complete/implement-task/BUG_REPORT.md diff --git a/tasks/implement-task/DOC_REVIEW.md b/tasks/complete/implement-task/DOC_REVIEW.md similarity index 100% rename from tasks/implement-task/DOC_REVIEW.md rename to tasks/complete/implement-task/DOC_REVIEW.md diff --git a/tasks/implement-task/IMPLEMENTATION.md b/tasks/complete/implement-task/IMPLEMENTATION.md similarity index 100% rename from tasks/implement-task/IMPLEMENTATION.md rename to tasks/complete/implement-task/IMPLEMENTATION.md diff --git a/tasks/implement-task/REVIEW.md b/tasks/complete/implement-task/REVIEW.md similarity index 100% rename from tasks/implement-task/REVIEW.md rename to tasks/complete/implement-task/REVIEW.md diff --git a/tasks/implement-task/SPEC.md b/tasks/complete/implement-task/SPEC.md similarity index 100% rename from tasks/implement-task/SPEC.md rename to tasks/complete/implement-task/SPEC.md diff --git a/tasks/implement-task/VERDICT.md b/tasks/complete/implement-task/VERDICT.md similarity index 100% rename from tasks/implement-task/VERDICT.md rename to tasks/complete/implement-task/VERDICT.md diff --git a/tasks/inflight-upgrade-path/.state b/tasks/complete/inflight-upgrade-path/.state similarity index 100% rename from tasks/inflight-upgrade-path/.state rename to tasks/complete/inflight-upgrade-path/.state diff --git a/tasks/inflight-upgrade-path/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/inflight-upgrade-path/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/inflight-upgrade-path/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/inflight-upgrade-path/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/inflight-upgrade-path/BUG_REPORT.md b/tasks/complete/inflight-upgrade-path/BUG_REPORT.md similarity index 100% rename from tasks/inflight-upgrade-path/BUG_REPORT.md rename to tasks/complete/inflight-upgrade-path/BUG_REPORT.md diff --git a/tasks/inflight-upgrade-path/DOC_REVIEW.md b/tasks/complete/inflight-upgrade-path/DOC_REVIEW.md similarity index 100% rename from tasks/inflight-upgrade-path/DOC_REVIEW.md rename to tasks/complete/inflight-upgrade-path/DOC_REVIEW.md diff --git a/tasks/inflight-upgrade-path/IMPLEMENTATION.md b/tasks/complete/inflight-upgrade-path/IMPLEMENTATION.md similarity index 100% rename from tasks/inflight-upgrade-path/IMPLEMENTATION.md rename to tasks/complete/inflight-upgrade-path/IMPLEMENTATION.md diff --git a/tasks/inflight-upgrade-path/SPEC.md b/tasks/complete/inflight-upgrade-path/SPEC.md similarity index 100% rename from tasks/inflight-upgrade-path/SPEC.md rename to tasks/complete/inflight-upgrade-path/SPEC.md diff --git a/tasks/inflight-upgrade-path/VERDICT.md b/tasks/complete/inflight-upgrade-path/VERDICT.md similarity index 100% rename from tasks/inflight-upgrade-path/VERDICT.md rename to tasks/complete/inflight-upgrade-path/VERDICT.md diff --git a/tasks/multi-agent-support/.state b/tasks/complete/multi-agent-support/.state similarity index 100% rename from tasks/multi-agent-support/.state rename to tasks/complete/multi-agent-support/.state diff --git a/tasks/multi-agent-support/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/multi-agent-support/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/multi-agent-support/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/multi-agent-support/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/multi-agent-support/BUG_REPORT.md b/tasks/complete/multi-agent-support/BUG_REPORT.md similarity index 100% rename from tasks/multi-agent-support/BUG_REPORT.md rename to tasks/complete/multi-agent-support/BUG_REPORT.md diff --git a/tasks/multi-agent-support/DOC_REVIEW.md b/tasks/complete/multi-agent-support/DOC_REVIEW.md similarity index 100% rename from tasks/multi-agent-support/DOC_REVIEW.md rename to tasks/complete/multi-agent-support/DOC_REVIEW.md diff --git a/tasks/multi-agent-support/IMPLEMENTATION.md b/tasks/complete/multi-agent-support/IMPLEMENTATION.md similarity index 100% rename from tasks/multi-agent-support/IMPLEMENTATION.md rename to tasks/complete/multi-agent-support/IMPLEMENTATION.md diff --git a/tasks/multi-agent-support/SPEC.md b/tasks/complete/multi-agent-support/SPEC.md similarity index 100% rename from tasks/multi-agent-support/SPEC.md rename to tasks/complete/multi-agent-support/SPEC.md diff --git a/tasks/multi-agent-support/VERDICT.md b/tasks/complete/multi-agent-support/VERDICT.md similarity index 100% rename from tasks/multi-agent-support/VERDICT.md rename to tasks/complete/multi-agent-support/VERDICT.md diff --git a/tasks/phase-scoped-prompts/.state b/tasks/complete/phase-scoped-prompts/.state similarity index 100% rename from tasks/phase-scoped-prompts/.state rename to tasks/complete/phase-scoped-prompts/.state diff --git a/tasks/phase-scoped-prompts/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/phase-scoped-prompts/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/phase-scoped-prompts/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/phase-scoped-prompts/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/phase-scoped-prompts/BUG_REPORT.md b/tasks/complete/phase-scoped-prompts/BUG_REPORT.md similarity index 100% rename from tasks/phase-scoped-prompts/BUG_REPORT.md rename to tasks/complete/phase-scoped-prompts/BUG_REPORT.md diff --git a/tasks/phase-scoped-prompts/DOC_REVIEW.md b/tasks/complete/phase-scoped-prompts/DOC_REVIEW.md similarity index 100% rename from tasks/phase-scoped-prompts/DOC_REVIEW.md rename to tasks/complete/phase-scoped-prompts/DOC_REVIEW.md diff --git a/tasks/phase-scoped-prompts/IMPLEMENTATION.md b/tasks/complete/phase-scoped-prompts/IMPLEMENTATION.md similarity index 100% rename from tasks/phase-scoped-prompts/IMPLEMENTATION.md rename to tasks/complete/phase-scoped-prompts/IMPLEMENTATION.md diff --git a/tasks/phase-scoped-prompts/SPEC.md b/tasks/complete/phase-scoped-prompts/SPEC.md similarity index 100% rename from tasks/phase-scoped-prompts/SPEC.md rename to tasks/complete/phase-scoped-prompts/SPEC.md diff --git a/tasks/phase-scoped-prompts/VERDICT.md b/tasks/complete/phase-scoped-prompts/VERDICT.md similarity index 100% rename from tasks/phase-scoped-prompts/VERDICT.md rename to tasks/complete/phase-scoped-prompts/VERDICT.md diff --git a/tasks/plug-stale-task-hole/.state b/tasks/complete/plug-stale-task-hole/.state similarity index 100% rename from tasks/plug-stale-task-hole/.state rename to tasks/complete/plug-stale-task-hole/.state diff --git a/tasks/plug-stale-task-hole/.state.approvals b/tasks/complete/plug-stale-task-hole/.state.approvals similarity index 100% rename from tasks/plug-stale-task-hole/.state.approvals rename to tasks/complete/plug-stale-task-hole/.state.approvals diff --git a/tasks/plug-stale-task-hole/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/plug-stale-task-hole/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/plug-stale-task-hole/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/plug-stale-task-hole/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/plug-stale-task-hole/BUG_REPORT.md b/tasks/complete/plug-stale-task-hole/BUG_REPORT.md similarity index 100% rename from tasks/plug-stale-task-hole/BUG_REPORT.md rename to tasks/complete/plug-stale-task-hole/BUG_REPORT.md diff --git a/tasks/plug-stale-task-hole/DOC_REVIEW.md b/tasks/complete/plug-stale-task-hole/DOC_REVIEW.md similarity index 100% rename from tasks/plug-stale-task-hole/DOC_REVIEW.md rename to tasks/complete/plug-stale-task-hole/DOC_REVIEW.md diff --git a/tasks/plug-stale-task-hole/IMPLEMENTATION.md b/tasks/complete/plug-stale-task-hole/IMPLEMENTATION.md similarity index 100% rename from tasks/plug-stale-task-hole/IMPLEMENTATION.md rename to tasks/complete/plug-stale-task-hole/IMPLEMENTATION.md diff --git a/tasks/plug-stale-task-hole/SPEC.md b/tasks/complete/plug-stale-task-hole/SPEC.md similarity index 100% rename from tasks/plug-stale-task-hole/SPEC.md rename to tasks/complete/plug-stale-task-hole/SPEC.md diff --git a/tasks/plug-stale-task-hole/VERDICT.md b/tasks/complete/plug-stale-task-hole/VERDICT.md similarity index 100% rename from tasks/plug-stale-task-hole/VERDICT.md rename to tasks/complete/plug-stale-task-hole/VERDICT.md diff --git a/tasks/port-pi-guard/.state b/tasks/complete/port-pi-guard/.state similarity index 100% rename from tasks/port-pi-guard/.state rename to tasks/complete/port-pi-guard/.state diff --git a/tasks/port-pi-guard/.state.approvals b/tasks/complete/port-pi-guard/.state.approvals similarity index 100% rename from tasks/port-pi-guard/.state.approvals rename to tasks/complete/port-pi-guard/.state.approvals diff --git a/tasks/port-pi-guard/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/port-pi-guard/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/port-pi-guard/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/port-pi-guard/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/port-pi-guard/BUG_REPORT.md b/tasks/complete/port-pi-guard/BUG_REPORT.md similarity index 100% rename from tasks/port-pi-guard/BUG_REPORT.md rename to tasks/complete/port-pi-guard/BUG_REPORT.md diff --git a/tasks/port-pi-guard/DOC_REVIEW.md b/tasks/complete/port-pi-guard/DOC_REVIEW.md similarity index 100% rename from tasks/port-pi-guard/DOC_REVIEW.md rename to tasks/complete/port-pi-guard/DOC_REVIEW.md diff --git a/tasks/port-pi-guard/IMPLEMENTATION.md b/tasks/complete/port-pi-guard/IMPLEMENTATION.md similarity index 100% rename from tasks/port-pi-guard/IMPLEMENTATION.md rename to tasks/complete/port-pi-guard/IMPLEMENTATION.md diff --git a/tasks/port-pi-guard/SPEC.md b/tasks/complete/port-pi-guard/SPEC.md similarity index 100% rename from tasks/port-pi-guard/SPEC.md rename to tasks/complete/port-pi-guard/SPEC.md diff --git a/tasks/port-pi-guard/VERDICT.md b/tasks/complete/port-pi-guard/VERDICT.md similarity index 100% rename from tasks/port-pi-guard/VERDICT.md rename to tasks/complete/port-pi-guard/VERDICT.md diff --git a/tasks/pre-existing-fixes/.state b/tasks/complete/pre-existing-fixes/.state similarity index 100% rename from tasks/pre-existing-fixes/.state rename to tasks/complete/pre-existing-fixes/.state diff --git a/tasks/pre-existing-fixes/.state.approvals b/tasks/complete/pre-existing-fixes/.state.approvals similarity index 100% rename from tasks/pre-existing-fixes/.state.approvals rename to tasks/complete/pre-existing-fixes/.state.approvals diff --git a/tasks/pre-existing-fixes/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/pre-existing-fixes/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/pre-existing-fixes/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/pre-existing-fixes/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/pre-existing-fixes/BUG_REPORT.md b/tasks/complete/pre-existing-fixes/BUG_REPORT.md similarity index 100% rename from tasks/pre-existing-fixes/BUG_REPORT.md rename to tasks/complete/pre-existing-fixes/BUG_REPORT.md diff --git a/tasks/pre-existing-fixes/DOC_REVIEW.md b/tasks/complete/pre-existing-fixes/DOC_REVIEW.md similarity index 100% rename from tasks/pre-existing-fixes/DOC_REVIEW.md rename to tasks/complete/pre-existing-fixes/DOC_REVIEW.md diff --git a/tasks/pre-existing-fixes/IMPLEMENTATION.md b/tasks/complete/pre-existing-fixes/IMPLEMENTATION.md similarity index 100% rename from tasks/pre-existing-fixes/IMPLEMENTATION.md rename to tasks/complete/pre-existing-fixes/IMPLEMENTATION.md diff --git a/tasks/pre-existing-fixes/SPEC.md b/tasks/complete/pre-existing-fixes/SPEC.md similarity index 100% rename from tasks/pre-existing-fixes/SPEC.md rename to tasks/complete/pre-existing-fixes/SPEC.md diff --git a/tasks/pre-existing-fixes/VERDICT.md b/tasks/complete/pre-existing-fixes/VERDICT.md similarity index 100% rename from tasks/pre-existing-fixes/VERDICT.md rename to tasks/complete/pre-existing-fixes/VERDICT.md diff --git a/tasks/project-migration/.state b/tasks/complete/project-migration/.state similarity index 100% rename from tasks/project-migration/.state rename to tasks/complete/project-migration/.state diff --git a/tasks/project-migration/BUG_REPORT.md b/tasks/complete/project-migration/BUG_REPORT.md similarity index 100% rename from tasks/project-migration/BUG_REPORT.md rename to tasks/complete/project-migration/BUG_REPORT.md diff --git a/tasks/project-migration/DOC_REVIEW.md b/tasks/complete/project-migration/DOC_REVIEW.md similarity index 100% rename from tasks/project-migration/DOC_REVIEW.md rename to tasks/complete/project-migration/DOC_REVIEW.md diff --git a/tasks/project-migration/IMPLEMENTATION.md b/tasks/complete/project-migration/IMPLEMENTATION.md similarity index 100% rename from tasks/project-migration/IMPLEMENTATION.md rename to tasks/complete/project-migration/IMPLEMENTATION.md diff --git a/tasks/project-migration/REVIEW.md b/tasks/complete/project-migration/REVIEW.md similarity index 100% rename from tasks/project-migration/REVIEW.md rename to tasks/complete/project-migration/REVIEW.md diff --git a/tasks/project-migration/SPEC.md b/tasks/complete/project-migration/SPEC.md similarity index 100% rename from tasks/project-migration/SPEC.md rename to tasks/complete/project-migration/SPEC.md diff --git a/tasks/project-migration/VERDICT.md b/tasks/complete/project-migration/VERDICT.md similarity index 100% rename from tasks/project-migration/VERDICT.md rename to tasks/complete/project-migration/VERDICT.md diff --git a/tasks/project-scoping-enforcement/.state b/tasks/complete/project-scoping-enforcement/.state similarity index 100% rename from tasks/project-scoping-enforcement/.state rename to tasks/complete/project-scoping-enforcement/.state diff --git a/tasks/project-scoping-enforcement/.state.approvals b/tasks/complete/project-scoping-enforcement/.state.approvals similarity index 100% rename from tasks/project-scoping-enforcement/.state.approvals rename to tasks/complete/project-scoping-enforcement/.state.approvals diff --git a/tasks/project-scoping-enforcement/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/project-scoping-enforcement/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/project-scoping-enforcement/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/project-scoping-enforcement/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/project-scoping-enforcement/BUG_REPORT.md b/tasks/complete/project-scoping-enforcement/BUG_REPORT.md similarity index 100% rename from tasks/project-scoping-enforcement/BUG_REPORT.md rename to tasks/complete/project-scoping-enforcement/BUG_REPORT.md diff --git a/tasks/project-scoping-enforcement/DOC_REVIEW.md b/tasks/complete/project-scoping-enforcement/DOC_REVIEW.md similarity index 100% rename from tasks/project-scoping-enforcement/DOC_REVIEW.md rename to tasks/complete/project-scoping-enforcement/DOC_REVIEW.md diff --git a/tasks/project-scoping-enforcement/IMPLEMENTATION.md b/tasks/complete/project-scoping-enforcement/IMPLEMENTATION.md similarity index 100% rename from tasks/project-scoping-enforcement/IMPLEMENTATION.md rename to tasks/complete/project-scoping-enforcement/IMPLEMENTATION.md diff --git a/tasks/project-scoping-enforcement/SPEC.md b/tasks/complete/project-scoping-enforcement/SPEC.md similarity index 100% rename from tasks/project-scoping-enforcement/SPEC.md rename to tasks/complete/project-scoping-enforcement/SPEC.md diff --git a/tasks/project-scoping-enforcement/VERDICT.md b/tasks/complete/project-scoping-enforcement/VERDICT.md similarity index 100% rename from tasks/project-scoping-enforcement/VERDICT.md rename to tasks/complete/project-scoping-enforcement/VERDICT.md diff --git a/tasks/push-to-gitea/.state b/tasks/complete/push-to-gitea/.state similarity index 100% rename from tasks/push-to-gitea/.state rename to tasks/complete/push-to-gitea/.state diff --git a/tasks/push-to-gitea/.state.approvals b/tasks/complete/push-to-gitea/.state.approvals similarity index 100% rename from tasks/push-to-gitea/.state.approvals rename to tasks/complete/push-to-gitea/.state.approvals diff --git a/tasks/push-to-gitea/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/push-to-gitea/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/push-to-gitea/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/push-to-gitea/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/push-to-gitea/BUG_REPORT.md b/tasks/complete/push-to-gitea/BUG_REPORT.md similarity index 100% rename from tasks/push-to-gitea/BUG_REPORT.md rename to tasks/complete/push-to-gitea/BUG_REPORT.md diff --git a/tasks/push-to-gitea/DOC_REVIEW.md b/tasks/complete/push-to-gitea/DOC_REVIEW.md similarity index 100% rename from tasks/push-to-gitea/DOC_REVIEW.md rename to tasks/complete/push-to-gitea/DOC_REVIEW.md diff --git a/tasks/push-to-gitea/IMPLEMENTATION.md b/tasks/complete/push-to-gitea/IMPLEMENTATION.md similarity index 100% rename from tasks/push-to-gitea/IMPLEMENTATION.md rename to tasks/complete/push-to-gitea/IMPLEMENTATION.md diff --git a/tasks/push-to-gitea/SPEC.md b/tasks/complete/push-to-gitea/SPEC.md similarity index 100% rename from tasks/push-to-gitea/SPEC.md rename to tasks/complete/push-to-gitea/SPEC.md diff --git a/tasks/push-to-gitea/VERDICT.md b/tasks/complete/push-to-gitea/VERDICT.md similarity index 100% rename from tasks/push-to-gitea/VERDICT.md rename to tasks/complete/push-to-gitea/VERDICT.md diff --git a/tasks/readme-upgrade-docs/.state b/tasks/complete/readme-upgrade-docs/.state similarity index 100% rename from tasks/readme-upgrade-docs/.state rename to tasks/complete/readme-upgrade-docs/.state diff --git a/tasks/readme-upgrade-docs/.state.approvals b/tasks/complete/readme-upgrade-docs/.state.approvals similarity index 100% rename from tasks/readme-upgrade-docs/.state.approvals rename to tasks/complete/readme-upgrade-docs/.state.approvals diff --git a/tasks/readme-upgrade-docs/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/readme-upgrade-docs/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/readme-upgrade-docs/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/readme-upgrade-docs/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/readme-upgrade-docs/BUG_REPORT.md b/tasks/complete/readme-upgrade-docs/BUG_REPORT.md similarity index 100% rename from tasks/readme-upgrade-docs/BUG_REPORT.md rename to tasks/complete/readme-upgrade-docs/BUG_REPORT.md diff --git a/tasks/readme-upgrade-docs/DOC_REVIEW.md b/tasks/complete/readme-upgrade-docs/DOC_REVIEW.md similarity index 100% rename from tasks/readme-upgrade-docs/DOC_REVIEW.md rename to tasks/complete/readme-upgrade-docs/DOC_REVIEW.md diff --git a/tasks/readme-upgrade-docs/IMPLEMENTATION.md b/tasks/complete/readme-upgrade-docs/IMPLEMENTATION.md similarity index 100% rename from tasks/readme-upgrade-docs/IMPLEMENTATION.md rename to tasks/complete/readme-upgrade-docs/IMPLEMENTATION.md diff --git a/tasks/readme-upgrade-docs/SPEC.md b/tasks/complete/readme-upgrade-docs/SPEC.md similarity index 100% rename from tasks/readme-upgrade-docs/SPEC.md rename to tasks/complete/readme-upgrade-docs/SPEC.md diff --git a/tasks/readme-upgrade-docs/VERDICT.md b/tasks/complete/readme-upgrade-docs/VERDICT.md similarity index 100% rename from tasks/readme-upgrade-docs/VERDICT.md rename to tasks/complete/readme-upgrade-docs/VERDICT.md diff --git a/tasks/reconcile-dashboard-spec/.state b/tasks/complete/reconcile-dashboard-spec/.state similarity index 100% rename from tasks/reconcile-dashboard-spec/.state rename to tasks/complete/reconcile-dashboard-spec/.state diff --git a/tasks/reconcile-dashboard-spec/IMPLEMENTATION.md b/tasks/complete/reconcile-dashboard-spec/IMPLEMENTATION.md similarity index 100% rename from tasks/reconcile-dashboard-spec/IMPLEMENTATION.md rename to tasks/complete/reconcile-dashboard-spec/IMPLEMENTATION.md diff --git a/tasks/reconcile-dashboard-spec/REVIEW.md b/tasks/complete/reconcile-dashboard-spec/REVIEW.md similarity index 100% rename from tasks/reconcile-dashboard-spec/REVIEW.md rename to tasks/complete/reconcile-dashboard-spec/REVIEW.md diff --git a/tasks/reconcile-dashboard-spec/SPEC.md b/tasks/complete/reconcile-dashboard-spec/SPEC.md similarity index 100% rename from tasks/reconcile-dashboard-spec/SPEC.md rename to tasks/complete/reconcile-dashboard-spec/SPEC.md diff --git a/tasks/reconcile-dashboard-spec/VERDICT.md b/tasks/complete/reconcile-dashboard-spec/VERDICT.md similarity index 100% rename from tasks/reconcile-dashboard-spec/VERDICT.md rename to tasks/complete/reconcile-dashboard-spec/VERDICT.md diff --git a/tasks/remove-file-system-watcher/.state b/tasks/complete/remove-file-system-watcher/.state similarity index 100% rename from tasks/remove-file-system-watcher/.state rename to tasks/complete/remove-file-system-watcher/.state diff --git a/tasks/remove-file-system-watcher/IMPLEMENTATION.md b/tasks/complete/remove-file-system-watcher/IMPLEMENTATION.md similarity index 100% rename from tasks/remove-file-system-watcher/IMPLEMENTATION.md rename to tasks/complete/remove-file-system-watcher/IMPLEMENTATION.md diff --git a/tasks/remove-file-system-watcher/REVIEW.md b/tasks/complete/remove-file-system-watcher/REVIEW.md similarity index 100% rename from tasks/remove-file-system-watcher/REVIEW.md rename to tasks/complete/remove-file-system-watcher/REVIEW.md diff --git a/tasks/remove-file-system-watcher/SPEC.md b/tasks/complete/remove-file-system-watcher/SPEC.md similarity index 100% rename from tasks/remove-file-system-watcher/SPEC.md rename to tasks/complete/remove-file-system-watcher/SPEC.md diff --git a/tasks/remove-file-system-watcher/VERDICT.md b/tasks/complete/remove-file-system-watcher/VERDICT.md similarity index 100% rename from tasks/remove-file-system-watcher/VERDICT.md rename to tasks/complete/remove-file-system-watcher/VERDICT.md diff --git a/tasks/review-textarea/.state b/tasks/complete/review-textarea/.state similarity index 100% rename from tasks/review-textarea/.state rename to tasks/complete/review-textarea/.state diff --git a/tasks/review-textarea/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/review-textarea/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/review-textarea/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/review-textarea/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/review-textarea/BUG_REPORT.md b/tasks/complete/review-textarea/BUG_REPORT.md similarity index 100% rename from tasks/review-textarea/BUG_REPORT.md rename to tasks/complete/review-textarea/BUG_REPORT.md diff --git a/tasks/review-textarea/DOC_REVIEW.md b/tasks/complete/review-textarea/DOC_REVIEW.md similarity index 100% rename from tasks/review-textarea/DOC_REVIEW.md rename to tasks/complete/review-textarea/DOC_REVIEW.md diff --git a/tasks/review-textarea/IMPLEMENTATION.md b/tasks/complete/review-textarea/IMPLEMENTATION.md similarity index 100% rename from tasks/review-textarea/IMPLEMENTATION.md rename to tasks/complete/review-textarea/IMPLEMENTATION.md diff --git a/tasks/review-textarea/REVIEW.md b/tasks/complete/review-textarea/REVIEW.md similarity index 100% rename from tasks/review-textarea/REVIEW.md rename to tasks/complete/review-textarea/REVIEW.md diff --git a/tasks/review-textarea/SPEC.md b/tasks/complete/review-textarea/SPEC.md similarity index 100% rename from tasks/review-textarea/SPEC.md rename to tasks/complete/review-textarea/SPEC.md diff --git a/tasks/review-textarea/VERDICT.md b/tasks/complete/review-textarea/VERDICT.md similarity index 100% rename from tasks/review-textarea/VERDICT.md rename to tasks/complete/review-textarea/VERDICT.md diff --git a/tasks/rewrite-vram-detection-python/.state b/tasks/complete/rewrite-vram-detection-python/.state similarity index 100% rename from tasks/rewrite-vram-detection-python/.state rename to tasks/complete/rewrite-vram-detection-python/.state diff --git a/tasks/rewrite-vram-detection-python/IMPLEMENTATION.md b/tasks/complete/rewrite-vram-detection-python/IMPLEMENTATION.md similarity index 100% rename from tasks/rewrite-vram-detection-python/IMPLEMENTATION.md rename to tasks/complete/rewrite-vram-detection-python/IMPLEMENTATION.md diff --git a/tasks/rewrite-vram-detection-python/REVIEW.md b/tasks/complete/rewrite-vram-detection-python/REVIEW.md similarity index 100% rename from tasks/rewrite-vram-detection-python/REVIEW.md rename to tasks/complete/rewrite-vram-detection-python/REVIEW.md diff --git a/tasks/rewrite-vram-detection-python/SPEC.md b/tasks/complete/rewrite-vram-detection-python/SPEC.md similarity index 100% rename from tasks/rewrite-vram-detection-python/SPEC.md rename to tasks/complete/rewrite-vram-detection-python/SPEC.md diff --git a/tasks/rewrite-vram-detection-python/VERDICT.md b/tasks/complete/rewrite-vram-detection-python/VERDICT.md similarity index 100% rename from tasks/rewrite-vram-detection-python/VERDICT.md rename to tasks/complete/rewrite-vram-detection-python/VERDICT.md diff --git a/tasks/runnable-test-suite/.state b/tasks/complete/runnable-test-suite/.state similarity index 100% rename from tasks/runnable-test-suite/.state rename to tasks/complete/runnable-test-suite/.state diff --git a/tasks/runnable-test-suite/.state.approvals b/tasks/complete/runnable-test-suite/.state.approvals similarity index 100% rename from tasks/runnable-test-suite/.state.approvals rename to tasks/complete/runnable-test-suite/.state.approvals diff --git a/tasks/runnable-test-suite/DECOMPOSITION.md b/tasks/complete/runnable-test-suite/DECOMPOSITION.md similarity index 100% rename from tasks/runnable-test-suite/DECOMPOSITION.md rename to tasks/complete/runnable-test-suite/DECOMPOSITION.md diff --git a/tasks/runnable-test-suite/SPEC.md b/tasks/complete/runnable-test-suite/SPEC.md similarity index 100% rename from tasks/runnable-test-suite/SPEC.md rename to tasks/complete/runnable-test-suite/SPEC.md diff --git a/tasks/runnable-test-suite/subtasks/make-tests-runnable/.state b/tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/.state similarity index 100% rename from tasks/runnable-test-suite/subtasks/make-tests-runnable/.state rename to tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/.state diff --git a/tasks/runnable-test-suite/subtasks/make-tests-runnable/.state.approvals b/tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/.state.approvals similarity index 100% rename from tasks/runnable-test-suite/subtasks/make-tests-runnable/.state.approvals rename to tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/.state.approvals diff --git a/tasks/runnable-test-suite/subtasks/make-tests-runnable/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/make-tests-runnable/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/runnable-test-suite/subtasks/make-tests-runnable/BUG_REPORT.md b/tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/BUG_REPORT.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/make-tests-runnable/BUG_REPORT.md rename to tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/BUG_REPORT.md diff --git a/tasks/runnable-test-suite/subtasks/make-tests-runnable/CODE_REVIEW.md b/tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/CODE_REVIEW.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/make-tests-runnable/CODE_REVIEW.md rename to tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/CODE_REVIEW.md diff --git a/tasks/runnable-test-suite/subtasks/make-tests-runnable/DOC_REVIEW.md b/tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/DOC_REVIEW.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/make-tests-runnable/DOC_REVIEW.md rename to tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/DOC_REVIEW.md diff --git a/tasks/runnable-test-suite/subtasks/make-tests-runnable/IMPLEMENTATION.md b/tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/IMPLEMENTATION.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/make-tests-runnable/IMPLEMENTATION.md rename to tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/IMPLEMENTATION.md diff --git a/tasks/runnable-test-suite/subtasks/make-tests-runnable/PARENT_SPEC.md b/tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/PARENT_SPEC.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/make-tests-runnable/PARENT_SPEC.md rename to tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/PARENT_SPEC.md diff --git a/tasks/runnable-test-suite/subtasks/make-tests-runnable/SPEC.md b/tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/SPEC.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/make-tests-runnable/SPEC.md rename to tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/SPEC.md diff --git a/tasks/runnable-test-suite/subtasks/make-tests-runnable/VERDICT.md b/tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/VERDICT.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/make-tests-runnable/VERDICT.md rename to tasks/complete/runnable-test-suite/subtasks/make-tests-runnable/VERDICT.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/.state b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/.state similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/.state rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/.state diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/.state.approvals b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/.state.approvals similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/.state.approvals rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/.state.approvals diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/BUG_REPORT.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/BUG_REPORT.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/BUG_REPORT.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/BUG_REPORT.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/CODE_REVIEW.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/CODE_REVIEW.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/CODE_REVIEW.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/CODE_REVIEW.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/DOC_REVIEW.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/DOC_REVIEW.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/DOC_REVIEW.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/DOC_REVIEW.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/IMPLEMENTATION.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/IMPLEMENTATION.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/IMPLEMENTATION.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/IMPLEMENTATION.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/PARENT_SPEC.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/PARENT_SPEC.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/PARENT_SPEC.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/PARENT_SPEC.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/SPEC.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/SPEC.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/SPEC.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/SPEC.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/VERDICT.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/VERDICT.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/VERDICT.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform-tests/VERDICT.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/.state b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/.state similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/.state rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/.state diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/.state.approvals b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/.state.approvals similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/.state.approvals rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/.state.approvals diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/BUG_REPORT.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/BUG_REPORT.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/BUG_REPORT.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/BUG_REPORT.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/CODE_REVIEW.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/CODE_REVIEW.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/CODE_REVIEW.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/CODE_REVIEW.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/DOC_REVIEW.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/DOC_REVIEW.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/DOC_REVIEW.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/DOC_REVIEW.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/IMPLEMENTATION.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/IMPLEMENTATION.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/IMPLEMENTATION.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/IMPLEMENTATION.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/PARENT_SPEC.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/PARENT_SPEC.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/PARENT_SPEC.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/PARENT_SPEC.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/SPEC.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/SPEC.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/SPEC.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/SPEC.md diff --git a/tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/VERDICT.md b/tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/VERDICT.md similarity index 100% rename from tasks/runnable-test-suite/subtasks/vram-detect-cross-platform/VERDICT.md rename to tasks/complete/runnable-test-suite/subtasks/vram-detect-cross-platform/VERDICT.md diff --git a/tasks/spec-in-detail/.state b/tasks/complete/spec-in-detail/.state similarity index 100% rename from tasks/spec-in-detail/.state rename to tasks/complete/spec-in-detail/.state diff --git a/tasks/spec-in-detail/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/spec-in-detail/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/spec-in-detail/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/spec-in-detail/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/spec-in-detail/BUG_REPORT.md b/tasks/complete/spec-in-detail/BUG_REPORT.md similarity index 100% rename from tasks/spec-in-detail/BUG_REPORT.md rename to tasks/complete/spec-in-detail/BUG_REPORT.md diff --git a/tasks/spec-in-detail/DOC_REVIEW.md b/tasks/complete/spec-in-detail/DOC_REVIEW.md similarity index 100% rename from tasks/spec-in-detail/DOC_REVIEW.md rename to tasks/complete/spec-in-detail/DOC_REVIEW.md diff --git a/tasks/spec-in-detail/IMPLEMENTATION.md b/tasks/complete/spec-in-detail/IMPLEMENTATION.md similarity index 100% rename from tasks/spec-in-detail/IMPLEMENTATION.md rename to tasks/complete/spec-in-detail/IMPLEMENTATION.md diff --git a/tasks/spec-in-detail/REVIEW.md b/tasks/complete/spec-in-detail/REVIEW.md similarity index 100% rename from tasks/spec-in-detail/REVIEW.md rename to tasks/complete/spec-in-detail/REVIEW.md diff --git a/tasks/spec-in-detail/SPEC.md b/tasks/complete/spec-in-detail/SPEC.md similarity index 100% rename from tasks/spec-in-detail/SPEC.md rename to tasks/complete/spec-in-detail/SPEC.md diff --git a/tasks/spec-in-detail/VERDICT.md b/tasks/complete/spec-in-detail/VERDICT.md similarity index 100% rename from tasks/spec-in-detail/VERDICT.md rename to tasks/complete/spec-in-detail/VERDICT.md diff --git a/tasks/standardize-task-path-conventions/.state b/tasks/complete/standardize-task-path-conventions/.state similarity index 100% rename from tasks/standardize-task-path-conventions/.state rename to tasks/complete/standardize-task-path-conventions/.state diff --git a/tasks/standardize-task-path-conventions/IMPLEMENTATION.md b/tasks/complete/standardize-task-path-conventions/IMPLEMENTATION.md similarity index 100% rename from tasks/standardize-task-path-conventions/IMPLEMENTATION.md rename to tasks/complete/standardize-task-path-conventions/IMPLEMENTATION.md diff --git a/tasks/standardize-task-path-conventions/REVIEW.md b/tasks/complete/standardize-task-path-conventions/REVIEW.md similarity index 100% rename from tasks/standardize-task-path-conventions/REVIEW.md rename to tasks/complete/standardize-task-path-conventions/REVIEW.md diff --git a/tasks/standardize-task-path-conventions/SPEC.md b/tasks/complete/standardize-task-path-conventions/SPEC.md similarity index 100% rename from tasks/standardize-task-path-conventions/SPEC.md rename to tasks/complete/standardize-task-path-conventions/SPEC.md diff --git a/tasks/standardize-task-path-conventions/VERDICT.md b/tasks/complete/standardize-task-path-conventions/VERDICT.md similarity index 100% rename from tasks/standardize-task-path-conventions/VERDICT.md rename to tasks/complete/standardize-task-path-conventions/VERDICT.md diff --git a/tasks/state-file-enforcement/.state b/tasks/complete/state-file-enforcement/.state similarity index 100% rename from tasks/state-file-enforcement/.state rename to tasks/complete/state-file-enforcement/.state diff --git a/tasks/state-file-enforcement/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/state-file-enforcement/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/state-file-enforcement/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/state-file-enforcement/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/state-file-enforcement/BUG_REPORT.md b/tasks/complete/state-file-enforcement/BUG_REPORT.md similarity index 100% rename from tasks/state-file-enforcement/BUG_REPORT.md rename to tasks/complete/state-file-enforcement/BUG_REPORT.md diff --git a/tasks/state-file-enforcement/DOC_REVIEW.md b/tasks/complete/state-file-enforcement/DOC_REVIEW.md similarity index 100% rename from tasks/state-file-enforcement/DOC_REVIEW.md rename to tasks/complete/state-file-enforcement/DOC_REVIEW.md diff --git a/tasks/state-file-enforcement/IMPLEMENTATION.md b/tasks/complete/state-file-enforcement/IMPLEMENTATION.md similarity index 100% rename from tasks/state-file-enforcement/IMPLEMENTATION.md rename to tasks/complete/state-file-enforcement/IMPLEMENTATION.md diff --git a/tasks/state-file-enforcement/SPEC.md b/tasks/complete/state-file-enforcement/SPEC.md similarity index 100% rename from tasks/state-file-enforcement/SPEC.md rename to tasks/complete/state-file-enforcement/SPEC.md diff --git a/tasks/state-file-enforcement/VERDICT.md b/tasks/complete/state-file-enforcement/VERDICT.md similarity index 100% rename from tasks/state-file-enforcement/VERDICT.md rename to tasks/complete/state-file-enforcement/VERDICT.md diff --git a/tasks/status-script/.state b/tasks/complete/status-script/.state similarity index 100% rename from tasks/status-script/.state rename to tasks/complete/status-script/.state diff --git a/tasks/status-script/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/status-script/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/status-script/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/status-script/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/status-script/BUG_REPORT.md b/tasks/complete/status-script/BUG_REPORT.md similarity index 100% rename from tasks/status-script/BUG_REPORT.md rename to tasks/complete/status-script/BUG_REPORT.md diff --git a/tasks/status-script/DOC_REVIEW.md b/tasks/complete/status-script/DOC_REVIEW.md similarity index 100% rename from tasks/status-script/DOC_REVIEW.md rename to tasks/complete/status-script/DOC_REVIEW.md diff --git a/tasks/status-script/IMPLEMENTATION.md b/tasks/complete/status-script/IMPLEMENTATION.md similarity index 100% rename from tasks/status-script/IMPLEMENTATION.md rename to tasks/complete/status-script/IMPLEMENTATION.md diff --git a/tasks/status-script/SPEC.md b/tasks/complete/status-script/SPEC.md similarity index 100% rename from tasks/status-script/SPEC.md rename to tasks/complete/status-script/SPEC.md diff --git a/tasks/status-script/VERDICT.md b/tasks/complete/status-script/VERDICT.md similarity index 100% rename from tasks/status-script/VERDICT.md rename to tasks/complete/status-script/VERDICT.md diff --git a/tasks/task-detail-modal/.state b/tasks/complete/task-detail-modal/.state similarity index 100% rename from tasks/task-detail-modal/.state rename to tasks/complete/task-detail-modal/.state diff --git a/tasks/task-detail-modal/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/task-detail-modal/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/task-detail-modal/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/task-detail-modal/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/task-detail-modal/BUG_REPORT.md b/tasks/complete/task-detail-modal/BUG_REPORT.md similarity index 100% rename from tasks/task-detail-modal/BUG_REPORT.md rename to tasks/complete/task-detail-modal/BUG_REPORT.md diff --git a/tasks/task-detail-modal/DOC_REVIEW.md b/tasks/complete/task-detail-modal/DOC_REVIEW.md similarity index 100% rename from tasks/task-detail-modal/DOC_REVIEW.md rename to tasks/complete/task-detail-modal/DOC_REVIEW.md diff --git a/tasks/task-detail-modal/IMPLEMENTATION.md b/tasks/complete/task-detail-modal/IMPLEMENTATION.md similarity index 100% rename from tasks/task-detail-modal/IMPLEMENTATION.md rename to tasks/complete/task-detail-modal/IMPLEMENTATION.md diff --git a/tasks/task-detail-modal/REVIEW.md b/tasks/complete/task-detail-modal/REVIEW.md similarity index 100% rename from tasks/task-detail-modal/REVIEW.md rename to tasks/complete/task-detail-modal/REVIEW.md diff --git a/tasks/task-detail-modal/SPEC.md b/tasks/complete/task-detail-modal/SPEC.md similarity index 100% rename from tasks/task-detail-modal/SPEC.md rename to tasks/complete/task-detail-modal/SPEC.md diff --git a/tasks/task-detail-modal/VERDICT.md b/tasks/complete/task-detail-modal/VERDICT.md similarity index 100% rename from tasks/task-detail-modal/VERDICT.md rename to tasks/complete/task-detail-modal/VERDICT.md diff --git a/tasks/task-status-reason/.state b/tasks/complete/task-status-reason/.state similarity index 100% rename from tasks/task-status-reason/.state rename to tasks/complete/task-status-reason/.state diff --git a/tasks/task-status-reason/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/task-status-reason/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/task-status-reason/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/task-status-reason/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/task-status-reason/BUG_REPORT.md b/tasks/complete/task-status-reason/BUG_REPORT.md similarity index 100% rename from tasks/task-status-reason/BUG_REPORT.md rename to tasks/complete/task-status-reason/BUG_REPORT.md diff --git a/tasks/task-status-reason/DOC_REVIEW.md b/tasks/complete/task-status-reason/DOC_REVIEW.md similarity index 100% rename from tasks/task-status-reason/DOC_REVIEW.md rename to tasks/complete/task-status-reason/DOC_REVIEW.md diff --git a/tasks/task-status-reason/IMPLEMENTATION.md b/tasks/complete/task-status-reason/IMPLEMENTATION.md similarity index 100% rename from tasks/task-status-reason/IMPLEMENTATION.md rename to tasks/complete/task-status-reason/IMPLEMENTATION.md diff --git a/tasks/task-status-reason/SPEC.md b/tasks/complete/task-status-reason/SPEC.md similarity index 100% rename from tasks/task-status-reason/SPEC.md rename to tasks/complete/task-status-reason/SPEC.md diff --git a/tasks/task-status-reason/VERDICT.md b/tasks/complete/task-status-reason/VERDICT.md similarity index 100% rename from tasks/task-status-reason/VERDICT.md rename to tasks/complete/task-status-reason/VERDICT.md diff --git a/tasks/upgrade-pre-commit-autopilot-check/.state b/tasks/complete/upgrade-pre-commit-autopilot-check/.state similarity index 100% rename from tasks/upgrade-pre-commit-autopilot-check/.state rename to tasks/complete/upgrade-pre-commit-autopilot-check/.state diff --git a/tasks/upgrade-pre-commit-autopilot-check/.state.approvals b/tasks/complete/upgrade-pre-commit-autopilot-check/.state.approvals similarity index 100% rename from tasks/upgrade-pre-commit-autopilot-check/.state.approvals rename to tasks/complete/upgrade-pre-commit-autopilot-check/.state.approvals diff --git a/tasks/upgrade-pre-commit-autopilot-check/ADVERSARIAL_BUG_REPORT.md b/tasks/complete/upgrade-pre-commit-autopilot-check/ADVERSARIAL_BUG_REPORT.md similarity index 100% rename from tasks/upgrade-pre-commit-autopilot-check/ADVERSARIAL_BUG_REPORT.md rename to tasks/complete/upgrade-pre-commit-autopilot-check/ADVERSARIAL_BUG_REPORT.md diff --git a/tasks/upgrade-pre-commit-autopilot-check/BUG_REPORT.md b/tasks/complete/upgrade-pre-commit-autopilot-check/BUG_REPORT.md similarity index 100% rename from tasks/upgrade-pre-commit-autopilot-check/BUG_REPORT.md rename to tasks/complete/upgrade-pre-commit-autopilot-check/BUG_REPORT.md diff --git a/tasks/upgrade-pre-commit-autopilot-check/CODE_REVIEW.md b/tasks/complete/upgrade-pre-commit-autopilot-check/CODE_REVIEW.md similarity index 100% rename from tasks/upgrade-pre-commit-autopilot-check/CODE_REVIEW.md rename to tasks/complete/upgrade-pre-commit-autopilot-check/CODE_REVIEW.md diff --git a/tasks/upgrade-pre-commit-autopilot-check/DOC_REVIEW.md b/tasks/complete/upgrade-pre-commit-autopilot-check/DOC_REVIEW.md similarity index 100% rename from tasks/upgrade-pre-commit-autopilot-check/DOC_REVIEW.md rename to tasks/complete/upgrade-pre-commit-autopilot-check/DOC_REVIEW.md diff --git a/tasks/upgrade-pre-commit-autopilot-check/IMPLEMENTATION.md b/tasks/complete/upgrade-pre-commit-autopilot-check/IMPLEMENTATION.md similarity index 100% rename from tasks/upgrade-pre-commit-autopilot-check/IMPLEMENTATION.md rename to tasks/complete/upgrade-pre-commit-autopilot-check/IMPLEMENTATION.md diff --git a/tasks/upgrade-pre-commit-autopilot-check/SPEC.md b/tasks/complete/upgrade-pre-commit-autopilot-check/SPEC.md similarity index 100% rename from tasks/upgrade-pre-commit-autopilot-check/SPEC.md rename to tasks/complete/upgrade-pre-commit-autopilot-check/SPEC.md diff --git a/tasks/upgrade-pre-commit-autopilot-check/VERDICT.md b/tasks/complete/upgrade-pre-commit-autopilot-check/VERDICT.md similarity index 100% rename from tasks/upgrade-pre-commit-autopilot-check/VERDICT.md rename to tasks/complete/upgrade-pre-commit-autopilot-check/VERDICT.md diff --git a/tasks/wire-dashboard-config/.state b/tasks/complete/wire-dashboard-config/.state similarity index 100% rename from tasks/wire-dashboard-config/.state rename to tasks/complete/wire-dashboard-config/.state diff --git a/tasks/wire-dashboard-config/IMPLEMENTATION.md b/tasks/complete/wire-dashboard-config/IMPLEMENTATION.md similarity index 100% rename from tasks/wire-dashboard-config/IMPLEMENTATION.md rename to tasks/complete/wire-dashboard-config/IMPLEMENTATION.md diff --git a/tasks/wire-dashboard-config/REVIEW.md b/tasks/complete/wire-dashboard-config/REVIEW.md similarity index 100% rename from tasks/wire-dashboard-config/REVIEW.md rename to tasks/complete/wire-dashboard-config/REVIEW.md diff --git a/tasks/wire-dashboard-config/SPEC.md b/tasks/complete/wire-dashboard-config/SPEC.md similarity index 100% rename from tasks/wire-dashboard-config/SPEC.md rename to tasks/complete/wire-dashboard-config/SPEC.md diff --git a/tasks/wire-dashboard-config/VERDICT.md b/tasks/complete/wire-dashboard-config/VERDICT.md similarity index 100% rename from tasks/wire-dashboard-config/VERDICT.md rename to tasks/complete/wire-dashboard-config/VERDICT.md diff --git a/tests/test_app.py b/tests/test_app.py index 2f459af..a710554 100644 --- a/tests/test_app.py +++ b/tests/test_app.py @@ -242,3 +242,78 @@ class TestConfigEndpoint: handler._send_error = lambda c, m: errors.append((c, m)) handler._handle_config_update() assert errors[0][0] == 400 + + +def test_serve_scheduled_returns_jobs(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + """`/api/scheduled` returns jobs from `_list_scheduled_jobs`.""" + import automaton.dashboard.ui.app as app_mod + + class _FakeStatusMod: + def _list_scheduled_jobs(self=None, project=None): + return [ + {"label": "com.automaton.cleanup", "kind": "cleanup", "name": "", + "status": "enabled", "next_run_seconds": 86400, + "stub_path": "/x/stub.sh", "runtime_state": None}, + {"label": "com.automaton.loop.ci", "kind": "loop", "name": "ci", + "status": "disabled", "next_run_seconds": 60, + "stub_path": None, "runtime_state": {"status": "paused"}, + "agent_type": "single"}, + ] + + monkeypatch.setattr(app_mod, "_get_status_module", lambda: _FakeStatusMod()) + handler = DashboardHandler.__new__(DashboardHandler) + handler.project_root = tmp_path + response = {} + handler._send_json = lambda d: response.update(d) + handler._serve_scheduled() + assert response["available"] is True + assert len(response["jobs"]) == 2 + assert response["jobs"][0]["kind"] == "cleanup" + assert response["jobs"][1]["name"] == "ci" + assert response["jobs"][1]["agent_type"] == "single" + + +def test_serve_scheduled_unavailable(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + """When status.py can't be loaded, `/api/scheduled` reports unavailable.""" + import automaton.dashboard.ui.app as app_mod + + monkeypatch.setattr(app_mod, "_get_status_module", lambda: None) + handler = DashboardHandler.__new__(DashboardHandler) + handler.project_root = tmp_path + response = {} + handler._send_json = lambda d: response.update(d) + handler._serve_scheduled() + assert response["available"] is False + assert response["jobs"] == [] + + +def test_serve_scheduled_handles_errors(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + """Exceptions from `_list_scheduled_jobs` surface as `error` in the response.""" + import automaton.dashboard.ui.app as app_mod + + class _FakeStatusMod: + def _list_scheduled_jobs(self=None, project=None): + raise RuntimeError("boom") + + monkeypatch.setattr(app_mod, "_get_status_module", lambda: _FakeStatusMod()) + handler = DashboardHandler.__new__(DashboardHandler) + handler.project_root = tmp_path + response = {} + handler._send_json = lambda d: response.update(d) + handler._serve_scheduled() + assert response["available"] is True + assert response["jobs"] == [] + assert "boom" in response["error"] + + +def test_get_status_module_returns_none_when_missing(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + """`_get_status_module` returns None when status.py isn't found in ~/.automaton.""" + import automaton.dashboard.ui.app as app_mod + + # Reset the cached module, and point HOME at an empty dir so + # `Path.home() / .automaton / scripts / status.py` doesn't exist. + monkeypatch.setattr(app_mod, "_status_module", None) + monkeypatch.setenv("HOME", str(tmp_path)) + # pathlib.Path.home() respects $HOME on every platform. + result = app_mod._get_status_module() + assert result is None diff --git a/tests/test_cleanup_done.py b/tests/test_cleanup_done.py new file mode 100644 index 0000000..a0fa062 --- /dev/null +++ b/tests/test_cleanup_done.py @@ -0,0 +1,163 @@ +"""Tests for the task cleanup process (--cleanup-done) and its scheduled install. + +Covers: + - cmd_cleanup_done: age threshold (by .state mtime), move, dry-run, skip + (dest exists, untracked, non-complete, below threshold), --json summary. + - --install-cleanup-schedule: stub + launchd plist written to + AUTOMATON_LAUNCHAGENTS_DIR override (no host bleed). + - _all_task_dirs excludes the 'complete' container (so --audit/--list stay + clean once tasks are archived). +""" + +import importlib.util +import json +import os +import subprocess +import sys +import time +from pathlib import Path + +import pytest + +_STATUS_PATH = Path.home() / ".automaton" / "scripts" / "status.py" +_spec = importlib.util.spec_from_file_location("st_cleanup", _STATUS_PATH) +st = importlib.util.module_from_spec(_spec) +_spec.loader.exec_module(st) + + +def _task_ns(days=None, dry_run=False, json_out=False, project=None): + class A: + pass + a = A() + a.days = days + a.dry_run = dry_run + a.json_output = json_out + a.project = project + return a + + +def _make_complete_task(project_root: Path, name: str, age_days: float = 0.0) -> Path: + task_dir = project_root / ".automaton" / "tasks" / name + task_dir.mkdir(parents=True) + (task_dir / ".state").write_text("complete\n") + (task_dir / "VERDICT.md").write_text("## Status: PASS\n") + if age_days: + when = time.time() - age_days * 86400.0 + os.utime(task_dir / ".state", (when, when)) + return task_dir + + +@pytest.fixture +def tmp_project(tmp_path): + (tmp_path / ".automaton" / "tasks").mkdir(parents=True) + return tmp_path + + +class TestCleanupDone: + def test_moves_old_complete_task(self, tmp_project): + _make_complete_task(tmp_project, "old-task", age_days=8.0) + rc = st.cmd_cleanup_done(_task_ns(days=7, project=str(tmp_project))) + assert rc == 0 + dest = tmp_project / ".automaton" / "tasks" / "complete" / "old-task" + assert dest.exists() + assert (dest / ".state").exists() + + def test_keeps_recent_complete_task(self, tmp_project): + td = _make_complete_task(tmp_project, "fresh-task", age_days=1.0) + st.cmd_cleanup_done(_task_ns(days=7, project=str(tmp_project))) + assert td.exists() # not moved + assert not (tmp_project / ".automaton" / "tasks" / "complete" / "fresh-task").exists() + + def test_dry_run_does_not_move(self, tmp_project): + td = _make_complete_task(tmp_project, "dry-task", age_days=10.0) + rc = st.cmd_cleanup_done(_task_ns(days=7, dry_run=True, project=str(tmp_project))) + assert rc == 0 + assert td.exists() # still in place + assert not (tmp_project / ".automaton" / "tasks" / "complete").exists() + + def test_skip_untracked(self, tmp_project): + # dir exists but no .state -> untracked, ignored + untracked = tmp_project / ".automaton" / "tasks" / "no-state" + untracked.mkdir(parents=True) + rc = st.cmd_cleanup_done(_task_ns(days=0, project=str(tmp_project))) + assert rc == 0 + assert untracked.exists() # untouched + + def test_skip_non_complete(self, tmp_project): + td = tmp_project / ".automaton" / "tasks" / "wip" + td.mkdir(parents=True) + (td / ".state").write_text("implement\n") + rc = st.cmd_cleanup_done(_task_ns(days=0, project=str(tmp_project))) + assert rc == 0 + assert td.exists() + assert (td / ".state").read_text().strip() == "implement" + + def test_skip_when_dest_exists(self, tmp_project, capsys): + _make_complete_task(tmp_project, "dup", age_days=9.0) + dest = tmp_project / ".automaton" / "tasks" / "complete" / "dup" + dest.mkdir(parents=True) + (dest / ".state").write_text("complete\n") + rc = st.cmd_cleanup_done(_task_ns(days=7, project=str(tmp_project))) + assert rc == 0 + out = capsys.readouterr().out + assert "skipped" in out and "dest_exists" in out + + def test_json_summary(self, tmp_project, capsys): + _make_complete_task(tmp_project, "json-old", age_days=9.0) + _make_complete_task(tmp_project, "json-new", age_days=1.0) + st.cmd_cleanup_done(_task_ns(days=7, json_out=True, project=str(tmp_project))) + out = capsys.readouterr().out + last = out.strip().splitlines()[-1] + summary = json.loads(last) + assert summary["days"] == 7 + assert summary["dry_run"] is False + assert "json-old" in summary["moved"] + assert "json-new" not in summary["moved"] + + def test_all_task_dirs_excludes_complete_container(self, tmp_project): + _make_complete_task(tmp_project, "active-done", age_days=0.0) + archive = tmp_project / ".automaton" / "tasks" / "complete" / "archived" + archive.mkdir(parents=True) + names = {n for n, _ in st._all_task_dirs(str(tmp_project))} + assert "active-done" in names + assert "complete" not in names + assert "archived" not in names + + +class TestInstallCleanupScheduleIsolation: + def _run_cli(self, args, env_dir): + env = os.environ.copy() + env["AUTOMATON_LAUNCHAGENTS_DIR"] = str(env_dir) + cmd = [sys.executable, str(_STATUS_PATH)] + args + return subprocess.run(cmd, capture_output=True, text=True, env=env) + + def test_plist_written_to_override_dir_not_host(self, tmp_path): + agents = tmp_path / "agents" + agents.mkdir() + res = self._run_cli( + ["--install-cleanup-schedule", "--days", "5", "--interval", "120", + "--project", str(tmp_path)], + agents, + ) + assert res.returncode == 0, res.stdout + res.stderr + plist = agents / "com.automaton.cleanup.plist" + assert plist.exists() + # Nothing bled to the real host LaunchAgents. + host = Path.home() / "Library" / "LaunchAgents" / "com.automaton.cleanup.plist" + assert not host.exists() + content = plist.read_text() + assert "com.automaton.cleanup" in content + assert "120" in content + stub = Path(st.AUTOMATON_DIR) / "scripts" / "automaton-cleanup.sh" + assert stub.exists() + assert "--days 5" in stub.read_text() + + @pytest.mark.skipif(sys.platform != "darwin", reason="Darwin plist branch") + def test_uninstall_via_disabled_rename(self, tmp_path): + agents = tmp_path / "agents" + agents.mkdir() + res = self._run_cli( + ["--install-cleanup-schedule", "--project", str(tmp_path)], agents) + assert res.returncode == 0 + plist = agents / "com.automaton.cleanup.plist" + assert plist.exists() \ No newline at end of file diff --git a/tests/test_task.py b/tests/test_task.py index a34df03..ec3796d 100644 --- a/tests/test_task.py +++ b/tests/test_task.py @@ -134,6 +134,19 @@ def test_discover_tasks(tmp_path: Path) -> None: assert tasks[1].state == TaskState.RESEARCH +def test_discover_tasks_skips_complete_container(tmp_path: Path) -> None: + _make_task(tmp_path, "active", {"SPEC.md": "# Spec"}) + complete = tmp_path / "complete" + complete.mkdir() + (complete / "done-task").mkdir() + (complete / "done-task" / "VERDICT.md").write_text("## Status: PASS") + (complete / "REVIEW.md").write_text("# Review\n- **Status**: approved") + + tasks = discover_tasks(tmp_path) + assert len(tasks) == 1 + assert tasks[0].name == "active" + + def test_discover_tasks_skips_subtasks_root(tmp_path: Path) -> None: parent = tmp_path / "parent" parent.mkdir()
SpaceCycle views (Board → Stats → Timeline)
SpaceCycle views (Board → Stats → Agent)
1Board view
2Statistics view
3Timeline view
3Agent view
tCycle themes (default → dark → light)
rManual refresh
fToggle filter bar