rdev/docs/ui/ideation/reference.md
jordan 863dfd3214
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
fix: skip root deployment for empty template (defaults to skeleton)
When req.Template is empty, it defaults to 'skeleton' but the check
in createInitialDeployment only matched 'skeleton' explicitly, not
empty string. This caused a broken deployment to be created for
monorepo projects with a non-existent image.

Root cause: slackpath-5 creates project with empty template, which
defaults to skeleton, but createInitialDeployment was still creating
a root deployment that references registry.threesix.ai/{project}:latest
which never gets built (skeleton has no root Dockerfile).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-07 19:32:19 -07:00

87 lines
4.2 KiB
Markdown

# Technical Reference: Orchard Studio UI
This document maps the Orchard Studio UI requirements to the existing `rdev` backend architecture and identifies necessary enhancements.
## 1. Architecture Overview
The UI acts as a control plane over the `rdev` API. It orchestrates three main domains:
1. **Project Management**: CRUD operations on K8s pods (`claudebox`).
2. **SDLC Orchestration**: Driving the feature lifecycle via agents.
3. **Agent Interaction**: Conversational interface for requirements gathering.
## 2. Feature Mapping
### 2.1 Project List & Dashboard
**UI Requirement**: "See a list of active projects... go into one project"
**Backend Support**: `GET /api/v1/projects`
* **Existing**: `Project` domain model (`internal/domain/project.go`) supports ID, Name, Status (`running`, `pending`, etc.).
* **Missing**: Real-time status updates (SSE/WebSocket) for project health are implemented in `internal/handlers/projects_stream.go` but need UI integration.
### 2.2 Work Queue
**UI Requirement**: "See the list of work that is queued up"
**Backend Support**: `GET /api/v1/projects/{id}/work` (inferred)
* **Existing**: `WorkTask` model (`internal/domain/work.go`) supports types `build`, `test`, `deploy`, `sdlc`.
* **Logic**: The `WorkQueueStats` and pagination are supported in the domain.
* **UI Needs**: A polling or SSE mechanism to update the task list as the orchestrator schedules work.
### 2.3 Conversational Request (The Architect)
**UI Requirement**: "Enter a flow where you can create a request... conversation creates specs"
**Backend Support**: **PARTIAL**
* **Existing**: `SDLCOrchestratorService` (`internal/service/sdlc_orchestrator.go`) can execute agent actions.
* **Missing**:
* **Persistent Chat**: No `Chat` or `Message` domain model exists to store history. `AgentRequest` has `SessionID`, but the backend doesn't seem to persist the conversation for UI retrieval.
* **Blueprint Model**: The "Plan/Blueprint" (JSON structure of requirements) described in the vision is not yet a concrete backend entity.
* **Proposal**:
* Create a `Blueprint` entity to store the structured plan (`dataModel`, `endpoints`, etc.).
* Create a `Conversation` entity to store the chat history between User and Architect.
### 2.4 Request Review & Investigation
**UI Requirement**: "Request goes into a slot to be reviewed... problems investigated... questions raised"
**Backend Support**: `POST /projects/{id}/sdlc/execute`
* **Existing**: The `SDLCService` and `Classifier` (implied) determine the next action (`ActionBlocked`, `ActionTransition`).
* **Flow**:
1. UI sends `execute` request.
2. Backend runs classification.
3. If blocked/question needed, returns `ActionBlocked` or `ActionIdle` with a message.
4. UI renders this as a "Question" or "Review Item".
5. User responds via `resolve` endpoint (`POST /projects/{id}/sdlc/resolve`).
### 2.5 Execution & OTEL
**UI Requirement**: "Queues it up... see previous requests and full OTEL"
**Backend Support**:
* **Execution**: `SDLCOrchestratorService` dispatches actions to agents (`executeAgentAction`).
* **OTEL**: `internal/telemetry` exists. The UI likely needs a proxy endpoint to query Trace/Metric data (e.g., via Jaeger/Prometheus API) or embed a view.
## 3. Data Model Enhancements (Required)
To support the vision, the backend likely needs these additions:
```go
// Proposed Domain Models
type Blueprint struct {
ID string
ProjectID string
Sections map[string]interface{} // JSON: DataModel, API, UI
Status string // Draft, Approved
}
type ChatMessage struct {
ID string
ProjectID string
Role string // user, system (architect)
Content string
Timestamp time.Time
}
```
## 4. API Integration Strategy
| UI Feature | Endpoint | Notes |
| :--- | :--- | :--- |
| **Project List** | `GET /projects` | Polling or SSE for status changes. |
| **Chat** | `POST /projects/{id}/chat` | **New Endpoint**. Needs to persist msg & invoke Agent. |
| **Plan View** | `GET /projects/{id}/blueprint` | **New Endpoint**. Returns structured spec. |
| **Build/Run** | `POST /projects/{id}/sdlc/execute` | Triggers the actual work based on current state. |
| **History** | `GET /projects/{id}/work` | List of past `WorkTask`s. |