Some Summary#14
Open
Fiooodooor wants to merge 13 commits into
Open
Conversation
added 13 commits
March 24, 2026 15:16
…d, and optional dependency checks
…tend UI, CI/CD, and QA tests
There was a problem hiding this comment.
Pull request overview
This PR introduces a new task lifecycle state (review) and wires it through the CLI, board/dashboard rendering, and task stats, alongside adding a lightweight REST API surface to the board server and expanding CI and test coverage (including transport and new board endpoints).
Changes:
- Add
TaskStatus.reviewand propagate it through task stats, CLI rendering/output, board renderer/static UI, and website mock terminal badge styling. - Add/expand board server REST endpoints (create team/task, update task, send message, cleanup team) plus a
/api/statsendpoint and request timing/logging. - Add new tests for watcher/waiter/transports/conflicts/board endpoints and extend CI with frontend build, packaging build, and a p2p test job.
Reviewed changes
Copilot reviewed 22 out of 22 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| website/src/styles.css | Adds --purple theme color and .t-review badge styling. |
| website/src/App.jsx | Updates terminal mock task badge from blocked to review. |
| tests/test_watcher.py | Adds unit tests for InboxWatcher polling and exec callback behavior. |
| tests/test_waiter.py | Adds unit tests for TaskWaiter completion/timeout/review counting/dead-agent recovery. |
| tests/test_transport.py | Adds tests for FileTransport and P2PTransport delivery/claim/ack/quarantine/count. |
| tests/test_tasks.py | Extends TaskStore tests for review lock clearing and review status stats/filtering. |
| tests/test_spawn_backends.py | Stabilizes PATH-related tests by clearing CLAWTEAM_BIN. |
| tests/test_conflicts.py | Adds tests for changed-line parsing and overlap severity computation. |
| tests/test_board.py | Adds tests for BoardRenderer review column and BoardHandler REST handlers. |
| SPECIFICATION.md | Adds a technical spec for the web dashboard and REST API. |
| skills/clawteam/references/cli-reference.md | Documents review as a valid task status and describes it. |
| docs/skills/clawteam/references/cli-reference.md | Mirrors the CLI reference updates under docs/. |
| clawteam/transport/file.py | Prevents count/fetch/claim from creating inbox dirs; handles missing inbox gracefully. |
| clawteam/team/waiter.py | Adds review counting to waiter progress/result output. |
| clawteam/team/tasks.py | Clears task lock when transitioning to review; includes review in stats. |
| clawteam/team/models.py | Adds TaskStatus.review enum member. |
| clawteam/cli/commands.py | Updates CLI help, styling, stats, and waiter progress output to include review. |
| clawteam/board/static/index.html | Adds review column and updates layout to 5 columns. |
| clawteam/board/server.py | Adds REST endpoints, stats endpoint, and request duration logging/connection stats. |
| clawteam/board/renderer.py | Adds review column to kanban render and updates docstring. |
| clawteam/board/collector.py | Groups tasks using all TaskStatus enum values (including review). |
| .github/workflows/ci.yml | Adds frontend build, Python package build, p2p test job, and Pages deploy pipeline. |
Comment on lines
+3
to
+6
| import os | ||
| import time | ||
| import fcntl | ||
| from pathlib import Path |
Comment on lines
+21
to
+38
| def test_p2p_transport_deliver_and_fetch(team_name): | ||
| # Receiver | ||
| receiver = P2PTransport(team_name, bind_agent="bob") | ||
|
|
||
| # Sender | ||
| sender = P2PTransport(team_name) | ||
|
|
||
| try: | ||
| data = b"p2p message" | ||
| sender.deliver("bob", data) | ||
|
|
||
| # Fetch on receiver (should use ZMQ) | ||
| # We might need a small sleep to allow ZMQ to connect and deliver | ||
| time.sleep(0.2) | ||
|
|
||
| fetched = receiver.fetch("bob", consume=True) | ||
| assert len(fetched) == 1 | ||
| assert fetched[0] == data |
|
|
||
| import pytest | ||
| from unittest.mock import MagicMock, patch | ||
| from clawteam.team.waiter import TaskWaiter, WaitResult, TaskStatus |
| @@ -30,3 +30,58 @@ jobs: | |||
| python-version: ${{ matrix.python-version }} | |||
| - run: pip install -e ".[dev]" | |||
Comment on lines
+55
to
+65
| """Handle a single HTTP request with performance tracking.""" | ||
| self._start_time = time.monotonic() | ||
| with self._stats_lock: | ||
| BoardHandler._active_connections += 1 | ||
| BoardHandler._total_requests += 1 | ||
| try: | ||
| super().handle() | ||
| finally: | ||
| with self._stats_lock: | ||
| BoardHandler._active_connections -= 1 | ||
|
|
Comment on lines
+131
to
+142
| if content_length == 0: | ||
| return {} | ||
| body = self.rfile.read(content_length) | ||
| return json.loads(body.decode("utf-8")) | ||
| except Exception: | ||
| return {} | ||
|
|
||
| def _handle_create_team(self): | ||
| from clawteam.identity import AgentIdentity | ||
| from clawteam.team.manager import TeamManager | ||
|
|
||
| body = self._get_json_body() |
Comment on lines
47
to
52
| task_store: TaskStore, | ||
| poll_interval: float = 5.0, | ||
| timeout: float | None = None, | ||
| on_message: Callable[[TeamMessage], None] | None = None, | ||
| on_progress: Callable[[int, int, int, int, int], None] | None = None, | ||
| on_progress: Callable[[int, int, int, int, int, int], None] | None = None, | ||
| on_agent_dead: Callable[[str, list[TaskItem]], None] | None = None, |
Comment on lines
+35
to
+38
| ## Testing Strategy | ||
| - **Unit Tests**: Implement comprehensive unit tests for `BoardHandler` in `tests/test_api.py`. | ||
| - **Integration Tests**: Verify end-to-end flows from API calls to filesystem changes. | ||
| - **UI Validation**: Ensure the landing page is responsive and visually consistent. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Change Type
Scope
NIC Porting Context (if applicable)
Gate Checklist (NIC porting PRs)
Linked Issue/PR
Root Cause / Regression History (if applicable)
Risk Register Impact
Regression Test Plan
For bug fixes, name the test(s) that would have caught this. For porting slices,
list the TDD tests that validate the change. Otherwise write
N/A.User-visible / Behavior Changes
List user-visible changes (including defaults/config).
If none, write
None.Diagram (if applicable)
For UI changes or non-trivial logic flows, include a small ASCII diagram reviewers can scan quickly. Otherwise write
N/A.Security Impact (required)
Yes/No)Yes/No)Yes/No)Yes/No)Yes/No)Yes, explain risk + mitigation:Repro + Verification
Environment
Steps
Expected
Actual
Evidence
Attach at least one:
Human Verification (required)
What you personally verified (not just CI), and how:
Review Conversations
If a bot review conversation is addressed by this PR, resolve that conversation yourself. Do not leave bot review conversation cleanup for maintainers.
Compatibility / Migration
Yes/No)Yes/No)Yes/No)Risks and Mitigations
List only real risks for this PR. Add/remove entries as needed. If none, write
None.