diff --git a/.ralph-tui/config.toml b/.ralph-tui/config.toml deleted file mode 100644 index a1b6c42..0000000 --- a/.ralph-tui/config.toml +++ /dev/null @@ -1,7 +0,0 @@ -[agent] -name = "claude" -model = "opus" - -[run] -iterations = 10 -delayMs = 1000 diff --git a/.scratch/dashboard-test-runner/prd.json b/.scratch/dashboard-test-runner/prd.json index c3a4d8f..334e875 100644 --- a/.scratch/dashboard-test-runner/prd.json +++ b/.scratch/dashboard-test-runner/prd.json @@ -33,11 +33,12 @@ "uv run pytest tests/test_dashboard.py -q passes." ], "priority": 2, - "passes": false, + "passes": true, "notes": "Depends on US-001. Preserve existing dashboard tabs and admin authentication conventions.", "dependsOn": [ "US-001" - ] + ], + "completionNotes": "Completed by agent" }, { "id": "US-003", @@ -59,6 +60,6 @@ } ], "metadata": { - "updatedAt": "2026-07-11T12:58:47.086Z" + "updatedAt": "2026-07-11T17:02:30.520Z" } } \ No newline at end of file diff --git a/.scratch/dashboard-test-runner/ralph-opus-iterations/bc37171f_2026-07-11_16-12-14_US-002.log b/.scratch/dashboard-test-runner/ralph-opus-iterations/bc37171f_2026-07-11_16-12-14_US-002.log new file mode 100644 index 0000000..acf54e8 --- /dev/null +++ b/.scratch/dashboard-test-runner/ralph-opus-iterations/bc37171f_2026-07-11_16-12-14_US-002.log @@ -0,0 +1,104 @@ +# Iteration 1 Log + +## Metadata + +- **Task ID**: US-002 +- **Task Title**: Add Testing dashboard tab with live test logs +- **Description**: As a tracker administrator, I want a Testing tab that lists discovered tests and exposes run/status/log controls so that I can operate and inspect tests from the dashboard. +- **Status**: failed +- **Task Completed**: No +- **Promise Detected**: No +- **Started At**: 2026-07-11T13:12:14.739Z +- **Ended At**: 2026-07-11T13:17:21.820Z +- **Duration**: 5m 7s +- **Input Tokens**: 202 +- **Output Tokens**: 19077 +- **Total Tokens**: 19279 +- **Agent**: claude +- **Model**: claude-opus-4-8 +- **Sandbox Mode**: auto +- **Sandbox Network**: Enabled +--- RAW OUTPUT --- +I'll start by studying the context — the PRD, progress notes, and existing dashboard code. +[Read] /run/media/popov/d/DEV/repos/d-popov.com/AI/.ralph-tui/progress.md +[Read] /run/media/popov/d/DEV/repos/d-popov.com/AI/.scratch/dashboard-test-runner/prd.json +US-001 is marked complete. Let me find the dashboard and the test-runner API it added. +[Bash] $ git log --oneline -3 && echo "--- FILES ---" && grep -rl "test.runner\|test_runner\|testRunner" --in... +[Bash] $ ls tests/test_dashboard.py && find . -name "*.py" -path "*tracker*" -not -path "*/node_modules/*" -n... +Let me read the US-001 API surface that I need to consume. +[Read] /run/media/popov/d/DEV/repos/d-popov.com/AI/packages/tracker/meshnet_tracker/test_runner.py +[Bash] $ grep -n "test" packages/tracker/meshnet_tracker/server.py | grep -i "route\|def \|path\|/api" | head... +Now the server endpoints and the dashboard structure. +[Read] /run/media/popov/d/DEV/repos/d-popov.com/AI/packages/tracker/meshnet_tracker/server.py +[Bash] $ echo "=== dashboard files ===" && find . -name "*.html" -not -path "*/node_modules/*" -not -path "*/... +Now the dashboard itself — I need its tab structure and admin-gating conventions. +[Bash] $ cd /run/media/popov/d/DEV/repos/d-popov.com/AI/packages/tracker/meshnet_tracker echo "LINES: $(wc -l... +Let me read the key regions: nav markup, tab-switching, admin mode, and the per-tab fetch dispatch. +[Read] /run/media/popov/d/DEV/repos/d-popov.com/AI/packages/tracker/meshnet_tracker/dashboard.html +[Read] /run/media/popov/d/DEV/repos/d-popov.com/AI/packages/tracker/meshnet_tracker/dashboard.html +[Read] /run/media/popov/d/DEV/repos/d-popov.com/AI/packages/tracker/meshnet_tracker/dashboard.html +[Read] /run/media/popov/d/DEV/repos/d-popov.com/AI/packages/tracker/meshnet_tracker/dashboard.html +Now the helper functions I'll reuse: `apiCall`, `renderIfChanged`, `renderConsole`, `table`. +[Bash] $ cd /run/media/popov/d/DEV/repos/d-popov.com/AI/packages/tracker/meshnet_tracker grep -n "^function a... +[Read] /run/media/popov/d/DEV/repos/d-popov.com/AI/packages/tracker/meshnet_tracker/dashboard.html +[Read] /run/media/popov/d/DEV/repos/d-popov.com/AI/packages/tracker/meshnet_tracker/dashboard.html +[Read] /run/media/popov/d/DEV/repos/d-popov.com/AI/packages/tracker/meshnet_tracker/dashboard.html +I have the full picture. Let me check the CSS classes and the tail of the existing test file for conventions. +[Bash] $ cd /run/media/popov/d/DEV/repos/d-popov.com/AI/packages/tracker/meshnet_tracker echo "=== console cs... +Now I'll implement. First the nav tab and panels. +[Edit] /run/media/popov/d/DEV/repos/d-popov.com/AI/packages/tracker/meshnet_tracker/dashboard.html edit: " +

Account

loading…
@@ -278,6 +289,23 @@

Strikes / bans / forfeitures

admin login required

Client balances

admin login required

Console output

admin login required
+
+

Test run status

+ +
no test run yet
+
+
+

Tests & suites

+
+ + +
+
admin login required
+
+
+

Test output

+
no test output yet
+
diff --git a/tests/test_dashboard.py b/tests/test_dashboard.py index c4a1e37..a7ae450 100644 --- a/tests/test_dashboard.py +++ b/tests/test_dashboard.py @@ -17,6 +17,7 @@ PANELS = [ "Usage summary", "Node throughput", "Request history", "Chat / inference", "Console output", + "Test run status", "Tests & suites", "Test output", ] @@ -295,3 +296,88 @@ def test_console_node_lifecycle_events_include_model_health(): assert expired_event["fields"]["model_health"]["coverage_percentage"] == 0.0 finally: tracker.stop() + + +def _dashboard_html(**kwargs) -> str: + tracker = TrackerServer(**kwargs) + port = tracker.start() + try: + return urllib.request.urlopen( + f"http://127.0.0.1:{port}/dashboard" + ).read().decode() + finally: + tracker.stop() + + +def test_dashboard_testing_tab_is_admin_only(): + """US-002: the Testing tab ships hidden and is only revealed for admins.""" + html = _dashboard_html() + + # Tab button exists but is hidden until setAdminMode(true) reveals it. + assert '