Orchestrata Ultimate › Plans › plan_subphase_1_1 › subplan-cxp-protocol-2026-04-12
Subplan: Sub-phase 1.1 — CXP Protocol (Steps 39-47)
Source: plans/plan_subphase_1_1/subplan-cxp-protocol-2026-04-12.md at 8a2cb42ad · last changed 2026-07-27 · first committed 2026-04-12 · 85 lines.
Prose pending.
Plan text
Subplan: Sub-phase 1.1 — CXP Protocol (Steps 39-47)
Context
Phase 0 is complete. 813 tests pass at 91% coverage on core modules. This subplan ports the CXP (Cross-Agent eXchange Protocol) package — 27 modules (~7,500 LOC) for inter-agent communication.
Source (read-only): /home/mohamed/workspace/orchestrata/packages/orchestrata-cxp/src/orchestrata/cxp/
Target: /home/mohamed/workspace/orchestrata-ultimate/src/orchestrata_ultimate/cxp/
Coverage gate: --cov-fail-under=90 on ported CXP modules.
Traceability: @traces("REQ-1.1-XXX") on all public classes.
Excluded (gRPC not portable to 3.14t): binary_serializer.py, grpc_client.py, grpc_server.py, prolog_bridge.py
Coverage Targets
| File | Target |
|---|---|
| cxp/packet.py | 90% |
| cxp/json_serializer.py | 90% |
| cxp/exceptions.py | 90% |
| cxp/headers.py | 90% |
| cxp/payload.py | 90% |
| cxp/threads.py | 90% |
| cxp/validator.py | 90% |
| cxp/dispatcher.py | 90% |
| cxp/constants.py | 90% |
| cxp/types.py | 90% |
Steps
Step 39: Create cxp/ package directory
Step 40: Port packet.py — CXPPacket dataclass
- @traces("REQ-1.1-001")
Step 41: Port json_serializer.py
- @traces("REQ-1.1-001")
Step 42: Port exceptions.py + headers.py
- @traces("REQ-1.1-002")
Step 43: Port payload.py + threads.py
- @traces("REQ-1.1-002")
Step 44: Port validator.py
- @traces("REQ-1.1-003")
Step 44b: Port remaining CXP modules (19 files)
- constants.py, delivery_status.py, deterministic_ids.py, dispatcher.py
- handler.py, interfaces.py (ABC->Protocol), priority.py, postman_adapter.py
- router.py, schema.py, serializer.py, session_adapter.py
- thread_store.py, types.py, version.py, version_compat.py, work_status.py
- ws_client.py, ws_server.py
- init.py (301 LOC with exports)
- postman_adapter.py and session_adapter.py need TYPE_CHECKING guards
- interfaces.py: convert ABCs to Protocol classes
- @traces("REQ-1.1-004") through REQ-1.1-006
Step 45: Verify InMemoryDispatcher exists in dispatcher.py
Step 46: Update init.py exports
Step 47: Gate check — all imports, tests >=813, coverage >=90%
Requirements
| REQ ID | Description |
|---|---|
| REQ-1.1-001 | packet.py + json_serializer.py import and serialize |
| REQ-1.1-002 | exceptions, headers, payload, threads import |
| REQ-1.1-003 | validator.py validates packets |
| REQ-1.1-004 | All 19 remaining modules import |
| REQ-1.1-005 | interfaces.py ABCs converted to Protocol |
| REQ-1.1-006 | ws_client + ws_server import (websockets dep) |
| REQ-1.1-007 | init.py exports CXPPacket, dispatcher |
| REQ-1.1-008 | All os.environ use .get() with defaults |
| REQ-1.1-009 | Tests pass (>=813), coverage >=90% on CXP |
| REQ-1.1-010 | TYPE_CHECKING guards for postman/session adapters |