Orchestrata Ultimate › Plans › e2e-deepseek-test-plan

E2E DeepSeek-v4-pro Dogfood Test Plan

Source: plans/e2e-deepseek-test-plan.md at 8a2cb42ad · last changed 2026-07-27 · first committed 2026-05-27 · 148 lines.

Prose pending.

Plan text

E2E DeepSeek-v4-pro Dogfood Test Plan

Field Value
Purpose End-to-end exercise of the orchestrata-ultimate pipeline: submit an intent, let the volks execute autonomously on DeepSeek v4-pro, and capture everything (volk conversations, CXP, gateway, errors) with unbuffered real-time logging.
Author Mohamed
Created 2026-05-27
Status Active
Driver scripts/e2e_run.py (drives PipelineRunner in-process)
Aligns with SPEC-100 (logging/exceptions), SPEC-102 (volk test harness), SPEC-004 (CXP), SPEC-014 (WebSocket gateway), SPEC-011 (provider manager), SPEC-028 (LLM client)

1. Objective

Prove the full intent → orchestration → output loop works on a real LLM with real infrastructure (Redis + Neo4j), and that we have provenance of exactly what happened — no simulation, no hidden fabrication (the lesson behind the VizInt provenance gates). Every LLM exchange, every CXP packet, every gateway message, and every error must be captured to durable, tail-able files in real time.

2. Model configuration (DONE + live-verified)

3. Architecture under test

intent ──> PipelineRunner.submit_intent()
              │   (Postman.route_sync — synchronous CXP routing)
              ├─> U:Cx Concierge ─ clarify intent (human-in-the-loop phase)
              ├─> U:BA / U:PM / U:Ar / U:Cd / U:Qa / J:Junior / U:Ux / U:Cp
              │     each volk: call_llm(...) -> deepseek-v4-pro
              └─> drivers (deepseek_coder / aider / claude_code) write files
       CXP packets ──> Neo4j (CXPAuditor) + Postman.message_log + Redis thread audit

Two-phase human model: an intent/clarify phase (Concierge asks questions; the harness plays the human with scripted answers) followed by autonomous execution watched through the logs (and, in gateway mode, the VizInt portal).

4. Observability design (the core deliverable)

scripts/e2e_run.py creates a per-run directory logs/e2e-runs/<ts>-<slug>/:

Artifact Contents Source
app.jsonl All structured logs (SPEC-100 JSON: timestamp/level/logger/message/correlation_id/session_id/volk_id), incl. CXP route logs, gateway logs, errors + stacktraces core.logging.configure_logging(level=DEBUG, json) on the root logger
conversation.jsonl Full volk↔LLM exchanges — system+user prompt, response, model, volk, attempt — one line per provider round-trip (incl. validation retries) llm.client._capture_exchange (enabled by ORCHESTRATA_CONVERSATION_LOG)
cxp.jsonl CXP packet flow for the thread Postman.get_log() (+ Neo4j CXPPacket nodes for graph queries)
console.log Human-readable mirror of stdout/stderr _Tee (flush-per-write)
summary.json intent, thread_id, models, env, per-round subjects, status, duration harness
errors.log full traceback if the run raises harness except

Unbuffered / real-time: PYTHONUNBUFFERED=1; Python's StreamHandler/FileHandler flush per record; _capture_exchange and _Tee flush on every write. Tail live: tail -f logs/e2e-runs/<run>/conversation.jsonl | jq .

Reconciling with SPEC-100: the spec wants non-blocking/async logging for high-throughput production. This is a watched dogfood test, so live visibility wins; full prompt/response capture is opt-in via env (off by default → respects FR-009 "no PII without consent"). CXP audit to Neo4j (CXPAuditor) and gateway audit (AuditWriter) already exist and are reused, not reinvented.

Gateway messages: the in-process driver does not traverse the WebSocket gateway. To capture gateway traffic (SPEC-014), run the same intent through kernel serve and connect the VizInt portal / a JSON-RPC client; gateway/server.py already logs inbound messages + RPC timing and audits connections. Gateway mode is phase 2 of this plan.

5. Tool augmentation for Coder + Architect (context-injection)

Decision: context-injection first (no agentic tool-loop yet — none exists in the volks). Before a Coder (U:Cd) or Architect (U:Ar) LLM call, the runtime gathers real codebase facts and injects them into the prompt as a <codebase_context> block:

The model reasons over verified AST facts instead of hallucinating structure. This is deterministic, low-risk, and faithful to the current no-tool-loop design; it can evolve into a DeepSeek function-calling loop later. (Implementation pending — phase 2.)

6. Scenarios

# Scenario Intent (example) Isolation Status
S1 Documentation (safest, first) "Generate developer docs (Markdown) for the kernel package: purpose, PipelineRunner flow, public classes." Scratch ORCHESTRATA_WORKSPACE under the run dir ▶ running
S2 Edit existing code "Add docstrings + type hints to module X of orchestrata-ultimate." Throwaway git worktree (never master) planned
S3 New project "Create a CLI todo app in Python with tests." Fresh /tmp/oua-newproj-<id> dir planned

Order: S1 → S2 → S3 (ascending blast radius). S2/S3 require the tool-augmentation (§5) and a worktree-isolated workspace.

7. Success criteria

Per-run (deterministic, no extra LLM calls — mirrors SPEC-102 FR-008 evaluators):

  1. Boots — 9 volks registered, providers registered (deepseek with 2 models).
  2. Completes — terminal subject reached (implementation_ready / qa_complete) or a clean, explained stop; no unhandled exception.
  3. Provenance — conversation.jsonl shows every exchange used deepseek-v4-pro (not claude/fallback); cxp.jsonl + Neo4j show the packet flow; app.jsonl has no ERROR/CRITICAL that aren't explained.
  4. Output — S1: Markdown files exist in the scratch workspace; S2: a diff applied in the worktree; S3: a runnable project scaffold.
  5. Quality (S2/S3) — syntax_check (ast.parse) + lint_check (ruff) clean on generated Python; optionally an llm_judge (deepseek-v4-pro, temp 0) score.

8. Safety / isolation

9. How to run

cd /tmp/oua-master
PYTHONUNBUFFERED=1 ./.venv/bin/python scripts/e2e_run.py \
    --intent "<intent text>" --slug <label> [--model deepseek-v4-pro] [--max-rounds 6]
# watch live:
tail -f logs/e2e-runs/<run>/conversation.jsonl | jq .
tail -f logs/e2e-runs/<run>/app.jsonl | jq 'select(.level=="ERROR" or .level=="WARNING")'

10. Open items / risks