chore(conductor): Add new track 'Test Harness Hardening'
This commit is contained in:
32
conductor/tracks/test_harness_hardening_20260310/spec.md
Normal file
32
conductor/tracks/test_harness_hardening_20260310/spec.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# Specification: Hook API & Test Harness Hardening
|
||||
|
||||
## Overview
|
||||
This track focuses on stabilizing the local development and testing environment by hardening the Hook API and its associated `live_gui` test harness. The goal is to eliminate port conflicts, ensure graceful teardowns, and standardize state serialization, laying the groundwork for a future WebSockets implementation.
|
||||
|
||||
## Functional Requirements
|
||||
- **Dynamic Port Allocation:**
|
||||
- The Hook Server (`src/api_hooks.py`) will implement a Sequential Fallback strategy for port binding.
|
||||
- It will attempt to bind to port `8999`. If `Address already in use` is encountered, it will sequentially try ports up to `9010` until successful.
|
||||
- The successfully bound port will be written to a temporary artifact file (e.g., `.mcp_port` or similar) so the test harness can discover it.
|
||||
- **Graceful Teardown:**
|
||||
- Implement a new `/api/shutdown` POST endpoint in the Hook API.
|
||||
- When called, this endpoint should safely signal the `AppController` and `App` to initiate a clean shutdown (joining threads, closing files) rather than relying on the OS to forcefully kill the process tree.
|
||||
- Update the `live_gui` fixture to call this endpoint during the `finally` block before resorting to `taskkill` as a last-resort fallback.
|
||||
- **State Serialization Audit:**
|
||||
- Formalize the structure returned by `/api/gui/state`.
|
||||
- Ensure all fields defined in `_gettable_fields` are safely serialized using standard dataclass/dict traversal (avoiding deep Pydantic dependencies for now, keeping it lightweight but strictly typed for future WebSocket pipeline compatibility).
|
||||
- Add missing fields discovered during recent UI tracks (e.g., `show_windows` states).
|
||||
|
||||
## Non-Functional Requirements
|
||||
- **Stability:** The `live_gui` fixture must pass 100% of the time without port conflict errors when tests are run sequentially.
|
||||
- **Performance:** The port scanning logic should fail fast and bind within milliseconds.
|
||||
|
||||
## Acceptance Criteria
|
||||
- [ ] A test script can successfully launch two concurrent `live_gui` instances, and they bind to different ports.
|
||||
- [ ] Calling `/api/shutdown` successfully stops the GUI process and returns a 200 OK.
|
||||
- [ ] The `live_gui` fixture uses the shutdown endpoint and the test suite passes without leaving orphaned processes.
|
||||
- [ ] The state returned by `/api/gui/state` is fully documented and includes all relevant nested objects (like `show_windows`).
|
||||
|
||||
## Out of Scope
|
||||
- Implementing the WebSockets streaming logic (this track only prepares the state schema for it).
|
||||
- Fixing failing simulation tests that are unrelated to the harness itself.
|
||||
Reference in New Issue
Block a user