Files
lcbp3/.agents/workflows/113-speckit-ocr-prompt-management.md
T
admin 09e304de84
CI / CD Pipeline / build (push) Successful in 7m5s
CI / CD Pipeline / deploy (push) Failing after 20m14s
690618:1444 237 #02
2026-06-18 14:44:46 +07:00

148 lines
6.3 KiB
Markdown

---
auto_execution_mode: 0
description: Execute OCR & AI Extraction prompt management workflow following ADR-037 3-Step Pipeline (OCR → AI Extract → RAG Prep)
---
# Workflow: speckit.ocr-prompt-management
This workflow orchestrates the **OCR & AI Extraction prompt management** feature implementation, following the 3-step pipeline pattern defined in ADR-037.
## Phase 1: Database & Infrastructure Setup
1. **Database Schema**:
- Verify `version` column exists in `ai_prompts` table (delta: `2026-06-15-fix-ai-prompts-columns.sql`)
- Seed default OCR system prompt (delta: `2026-06-17-seed-ocr-system-prompt.sql`)
- Verify entity has `@VersionColumn()` at `backend/src/modules/ai/prompts/ai-prompts.entity.ts`
2. **Infrastructure Verification**:
- Verify OCR sidecar is running on Desk-5439 (port 8765)
- Verify `/embed` endpoint exists in sidecar
- Verify environment variables: `OCR_SIDECAR_API_KEY`, `OCR_API_URL`
## Phase 2: Foundational Services
1. **Validation Service**:
- Extend `ai-prompts.service.ts` `create()` to support `ocr_system` (free-form, no required placeholder)
- Verify `{{ocr_text}}` placeholder validation for `ocr_extraction`
- Use existing DTOs: `CreateAiPromptDto`, `UpdatePromptNoteDto`, `ContextConfigDto`
2. **Optimistic Locking**:
- Modify `activate()` in `ai-prompts.service.ts` to accept `expectedVersion`
- Handle HTTP 409 Conflict when version mismatch occurs
- Add retry logic with exponential backoff in frontend
## Phase 3: User Story 1 - OCR System Prompt Management
### Backend
- Verify `AiPromptsService.create()` supports `ocr_system` (version auto-increment)
- Verify `getActive(promptType)` returns active ocr_system with Redis cache (60s)
- Verify existing routes: GET `/api/ai/prompts/{promptType}`, POST `/api/ai/prompts/{promptType}`, POST `/api/ai/prompts/{promptType}/{versionNumber}/activate`
### Frontend
- Create `adminAiPromptService` in `frontend/lib/services/admin-ai-prompt.service.ts`
- Implement `getPrompts()`, `createPrompt()`, `activatePrompt()` with optimistic locking
- Create `PromptManagementTabs` component
- Create `OcrPromptTab` component with text editor and version history
- Implement "Save New Version" button with validation
- Handle 409 Conflict error - show refresh dialog
### Sidecar Integration
- Update `/ocr-upload` endpoint in `specs/04-Infrastructure-OPS/04-00-docker-compose/Desk-5439/ocr-sidecar/app.py`:
- Add parameter: `systemPrompt: Optional[str] = Form(default=None)`
- Thread `systemPrompt` through `_process_pdf_doc()``process_ocr()`
- Append system prompt to `messages[0]["content"]` (typhoon OCR single-message format)
- Update `sandbox-ocr-engine.service.ts` to fetch active `ocr_system` prompt and send to sidecar
## Phase 4: User Story 2 - AI Extraction Prompt Management
### Backend
- Verify `ocr_extraction` validation in `create()` ({{ocr_text}} required)
- Verify `resolveActive('ocr_extraction', ocrText)` exists
- Verify `ai-batch.processor.ts` uses active `ocr_extraction` prompt
### Frontend
- Create `AiExtractionPromptTab` component
- Add placeholder helper buttons ({{ocr_text}}, {{master_data_context}})
- Show validation error inline if missing required placeholder
- Add template preview with syntax highlighting
## Phase 5: User Story 3 - Separate UI Tabs
### Frontend UI Polish
- Style `PromptManagementTabs` with clear tab indicators
- Add tab icons (OCR: eye/scan icon, AI: brain/robot icon)
- Show active status badge on each tab
- Implement tab state persistence (URL hash or localStorage)
- Add warning badge if no active prompt for a type
## Phase 6: User Story 4 - Full 3-Step Sandbox with RAG Prep
### Backend (RAG Prep Integration)
- Verify `rag_prep_prompt` validates `{{text}}` placeholder
- Verify `SandboxRagPrepDto` exists at `backend/src/modules/ai/dto/sandbox-rag-prep.dto.ts`
- Extend `ai-batch.processor.ts` `sandbox-rag-prep` job handler
- Implement semantic chunking using active `rag_prep_prompt`
- Verify sidecar `/embed` endpoint exists
- Verify POST `/api/ai/admin/sandbox/rag-prep` exists in AiController
- Verify Redis storage for RAG Prep results
- Verify GET sandbox job result endpoint (`/api/ai/admin/sandbox/job/:id`)
### Frontend (3-Step Sandbox UI)
- Create `SandboxStepIndicator` component showing 3 steps with status icons
- Extend `PromptManagementTabs` with "Sandbox" tab containing 3-step workflow
- Create `RagPrepResultPanel` component with chunk list + vector preview
- Implement vector preview display (first 5 dimensions: `[0.234, -0.891, ...]`)
- Add "Run Step 3 (RAG Prep)" button enabled after Step 2 completes
- Display chunk count and embedding status for each chunk
- Add "Activate This Version" button visible after all 3 steps complete successfully
### Integration (Full Pipeline)
- Wire Step 2 output (extracted metadata + text) as Step 3 input
- Implement sequential step execution (Step 1 → Step 2 → Step 3)
- Add pipeline status tracking in Redis
## Phase 7: Testing & Validation
### Error Handling (ADR-007)
- Add user-friendly error messages for validation errors in frontend
- Implement retry logic for 409 Conflict with exponential backoff
- Add Toast notifications for success/error states
### Testing
- Write unit tests for `AiPromptValidationService`
- Write integration test for optimistic locking conflict scenario
- E2E test: Admin creates OCR prompt → activates → runs Sandbox Step 1
- E2E test: Full 3-step pipeline - upload PDF → OCR → Extract → RAG Prep
- E2E test: Vector preview displays correctly with 5 dimensions
- E2E test: Step indicators show correct status for each step
## Usage
```
/speckit.ocr-prompt-management
```
## Dependencies
- **Phase 1**: None (infrastructure setup)
- **Phase 2**: Phase 1
- **Phase 3**: Phase 2
- **Phase 4**: Phase 2 (can run in parallel with Phase 3)
- **Phase 5**: Phase 3 + Phase 4
- **Phase 6**: Phase 3 + Phase 4
- **Phase 7**: Phase 6
## On Error
If any phase fails, stop and report:
- Which phase failed
- The specific task that failed
- Suggested remediation (e.g., "Verify OCR sidecar is running before Phase 3")
## Related ADRs
- **ADR-009**: Database schema changes (SQL deltas, no TypeORM migrations)
- **ADR-016**: Security authentication (RBAC for admin-only endpoints)
- **ADR-023/023A**: AI architecture (BullMQ queues, Ollama isolation)
- **ADR-037**: 3-Step Pipeline (OCR → AI Extract → RAG Prep)