diff --git a/clients/viewer/src/components/pipeline-viewer/StageTabs.tsx b/clients/viewer/src/components/pipeline-viewer/StageTabs.tsx
index d2bf4dc..baf50e5 100644
--- a/clients/viewer/src/components/pipeline-viewer/StageTabs.tsx
+++ b/clients/viewer/src/components/pipeline-viewer/StageTabs.tsx
@@ -141,7 +141,7 @@ function isProcessingInStage(
extraction: ['Docling Extraction', 'OCR Re-extraction', 'Extraction'],
analysis: ['PDF Classification', 'Structure Analysis'],
headings: ['Heading Levels', 'Heading Reconciliation'],
- translation: ['Page Content Corrections', 'Code Block Languages'],
+ translation: ['Page Content Corrections', 'Code Block Languages', 'Form Fields'],
assembly: ['Cross-Page Fixes', 'Final Cleanup'],
};
const names = nameMap[stage.name];
diff --git a/clients/viewer/src/types/pipeline-viewer.ts b/clients/viewer/src/types/pipeline-viewer.ts
index e539880..eda1baf 100644
--- a/clients/viewer/src/types/pipeline-viewer.ts
+++ b/clients/viewer/src/types/pipeline-viewer.ts
@@ -45,7 +45,7 @@ export const PIPELINE_STAGES: StageDefinition[] = [
{ name: 'extraction', label: 'Extraction', steps: ['docling', 'docling_ocr'] },
{ name: 'analysis', label: 'Analysis', steps: ['classification', 'structure'] },
{ name: 'headings', label: 'Headings', steps: ['heading_levels', 'heading_reconciliation'] },
- { name: 'translation', label: 'Translation', steps: ['page_content', 'code_blocks'] },
+ { name: 'translation', label: 'Translation', steps: ['page_content', 'code_blocks', 'form_fields'] },
{ name: 'assembly', label: 'Assembly', steps: ['boundaries', 'cleanup'] },
];
diff --git a/docs/reference/pipeline-phases.md b/docs/reference/pipeline-phases.md
index 2db405f..8a1f1e2 100644
--- a/docs/reference/pipeline-phases.md
+++ b/docs/reference/pipeline-phases.md
@@ -12,14 +12,14 @@ The pipeline has **5 versioned conversion phases** plus a **PII Review** gate th
| 1. **Extraction** | `docling`, `docling_ocr` (conditional) | No | PDF → markdown + page images via IBM Docling. `docling_ocr` only fires when the classifier flags a scanned document. |
| 2. **Analysis** | `classification`, `structure` | Yes | `classification` tags the document as digital / scanned / malformed. `structure` identifies headings, footnotes, code blocks, per-page layout attributes. |
| 3. **Headings** | `heading_reconciliation`, `heading_levels` | Yes | `heading_reconciliation` reconciles per-page heading candidates against the global outline. `heading_levels` normalises the hierarchy (H1 → H2 → H3, no skips). |
-| 4. **Translation** | `page_content`, `code_blocks` | Yes | `page_content` does per-page accessibility corrections (invokes image / table / list subagents). `code_blocks` tags fenced blocks with detected programming language. |
+| 4. **Translation** | `page_content`, `code_blocks`, `form_fields` | Yes | `page_content` does per-page accessibility corrections (invokes image / table / list subagents). `code_blocks` tags fenced blocks with detected programming language. `form_fields` detects form controls from each page image and injects accessible HTML (labelled inputs, `