Files
resolutionflow/docs/plans/archive/2026-02-19-procedural-editor-redesign-impl-revisions.md
chihlasm 932927b9df chore: archive old plan docs + add survey foundation files
Move completed plan docs to docs/plans/archive/. Add survey migration 046
and reference HTML/plan files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 02:03:38 -05:00

226 lines
7.3 KiB
Markdown

# Procedural Editor Redesign - Implementation Revisions
> **Date:** 2026-02-19
> **Revises:** `docs/plans/2026-02-19-procedural-editor-redesign-impl.md`
> **Related Design Revision:** `docs/plans/2026-02-19-procedural-editor-redesign-design-revisions.md`
## Goal
Revise the implementation plan so it matches actual architecture and APIs, with explicit handling for maintenance schedule persistence, step-list invariants, DnD constraints, and accessibility/test requirements.
## Critical Corrections from Original Impl Plan
1. Do not treat maintenance schedule as part of `tree_structure`.
2. Do not use `display_order` for procedural step reorder.
3. Do not assume `0 steps` state unless store invariant is changed intentionally.
4. Do not list `@dnd-kit/*` as new dependency (already installed).
5. Add explicit save orchestration for unsaved maintenance flows.
6. Add explicit failure handling when tree save succeeds but schedule save fails.
## Phase 0: Scope Lock
### Task 0.1 - Confirm invariants and UX ownership
**Decisions to lock in code before implementation:**
1. `procedure_end` remains fixed, non-draggable, last.
2. Minimum one `procedure_step` remains enforced (recommended).
3. Schedule editing in editor is source-of-truth for create/edit, with detail page as display/secondary entrypoint.
**Files:** none (decision checkpoint)
---
## Phase 1: Layout and Collapsible Sections
### Task 1.1 - Add shared collapsible wrapper
**Files:**
- Create: `frontend/src/components/procedural-editor/CollapsibleEditorSection.tsx`
**Requirements:**
1. Single-row collapsed summary.
2. Keyboard-accessible toggle button.
3. `aria-expanded`, `aria-controls`, and section `id`.
4. Optional `defaultExpanded`.
### Task 1.2 - Convert ProceduralEditorPage to fixed-height editor
**Files:**
- Modify: `frontend/src/pages/ProceduralEditorPage.tsx`
**Changes:**
1. Outer layout becomes `flex h-full flex-col overflow-hidden`.
2. Toolbar becomes sticky.
3. Details and Intake wrapped in `CollapsibleEditorSection`.
4. Steps area becomes `flex-1 min-h-0 overflow-y-auto`.
5. Accordion mode: only one section open at a time (explicit state in page component).
**Summaries:**
1. Details: `"Name" - N tags - Public/Private`.
2. Intake: `N fields: label1, label2...` (truncate).
---
## Phase 2: StepList Behavior and DnD
### Task 2.1 - Align header/empty behavior with current store invariant
**Files:**
- Modify: `frontend/src/components/procedural-editor/StepList.tsx`
- Optional invariant change (if desired): `frontend/src/store/proceduralEditorStore.ts`
**Required behavior (recommended):**
1. Keep minimum one `procedure_step`.
2. Remove/unset any `0 steps` UI paths.
3. Header shows:
- `Steps (N steps - ~M min)` when estimates exist
- `Steps (N steps)` otherwise.
### Task 2.2 - Ensure new step auto-expands + scrolls into view
**Files:**
- Modify: `frontend/src/components/procedural-editor/StepList.tsx`
- Verify existing store behavior in `frontend/src/store/proceduralEditorStore.ts`
**Behavior:**
1. On add step/section, expanded editor opens immediately.
2. Newly inserted row is scrolled into view via stable element refs (prefer scroll target by id over "scroll to bottom").
### Task 2.3 - Implement DnD with current model constraints
**Files:**
- Modify: `frontend/src/components/procedural-editor/StepList.tsx`
- Modify: `frontend/src/store/proceduralEditorStore.ts` (reuse `moveStep`)
**Rules:**
1. Draggable: `procedure_step`, `section_header`.
2. Non-draggable: `procedure_end`.
3. Reorder by array index only.
4. No `display_order` recalculation for steps.
5. Keyboard drag support and visible insertion indicator.
---
## Phase 3: Maintenance Schedule Section (Correct API orchestration)
### Task 3.1 - Add schedule section component
**Files:**
- Create: `frontend/src/components/procedural-editor/MaintenanceScheduleSection.tsx`
- Modify: `frontend/src/pages/ProceduralEditorPage.tsx`
**Behavior:**
1. Render only for `treeType === 'maintenance'`.
2. Capture:
- cron expression
- timezone
- target list id
3. Collapsed summary:
- configured: human-readable cadence + target list status
- unconfigured: `No schedule configured`.
### Task 3.2 - Add schedule draft UI state and save orchestration
**Files:**
- Modify: `frontend/src/store/proceduralEditorStore.ts` (UI draft state only)
- Modify: `frontend/src/pages/ProceduralEditorPage.tsx`
- Use: `frontend/src/api/maintenanceSchedules.ts`
**Save flow:**
1. Save tree first (`create`/`update`).
2. If maintenance and schedule draft present:
- if existing schedule id: `maintenanceSchedulesApi.update`
- else: `maintenanceSchedulesApi.create` with saved tree id.
3. If schedule save fails:
- keep tree save success
- show actionable error toast/banner
- preserve schedule draft as dirty.
### Task 3.3 - Existing flow load
**Files:**
- Modify: `frontend/src/pages/ProceduralEditorPage.tsx`
**Behavior:**
1. On edit maintenance flow, fetch schedule via `getForTree(treeId)`.
2. 404 = no schedule yet (valid state).
3. Hydrate schedule draft state for section UI.
---
## Phase 4: Integration polish and consistency
### Task 4.1 - Clarify MaintenanceFlowDetailPage role
**Files:**
- Modify (if needed): `frontend/src/pages/MaintenanceFlowDetailPage.tsx`
**Decision implementation:**
1. Keep schedule read-only there, with "Edit in Flow Editor" CTA.
2. Avoid split-brain schedule edits in two places unless explicitly desired.
---
## Phase 5: Tests and verification
### Task 5.1 - Automated tests
**Files (new/updated):**
- `frontend/src/components/procedural-editor/StepList.test.tsx`
- `frontend/src/pages/ProceduralEditorPage.test.tsx`
- `frontend/src/store/proceduralEditorStore.test.ts` (if absent, add focused tests)
**Minimum coverage:**
1. Reorder respects `procedure_end` constraints.
2. New steps auto-expand and scroll target call occurs.
3. Accordion open/close state and summaries.
4. Maintenance save orchestration:
- tree create/update then schedule create/update
- schedule failure does not revert tree success.
### Task 5.2 - Manual acceptance checklist
1. Steps list remains primary viewport focus in fixed-height layout.
2. Details/Intake/Schedule sections collapse and summarize correctly.
3. DnD works by mouse and keyboard.
4. End step never drags.
5. New maintenance flow:
- can save draft without schedule
- can save with schedule in one action (tree first, schedule second).
6. Existing maintenance flow loads schedule and saves edits.
### Task 5.3 - Build and lint gates
1. `cd frontend && npm run build`
2. `cd frontend && npm run test`
3. `cd frontend && npm run lint`
---
## File Impact (Revised)
### Create
1. `frontend/src/components/procedural-editor/CollapsibleEditorSection.tsx`
2. `frontend/src/components/procedural-editor/MaintenanceScheduleSection.tsx`
### Modify
1. `frontend/src/pages/ProceduralEditorPage.tsx`
2. `frontend/src/components/procedural-editor/StepList.tsx`
3. `frontend/src/components/procedural-editor/IntakeFormBuilder.tsx`
4. `frontend/src/store/proceduralEditorStore.ts`
5. `frontend/src/pages/MaintenanceFlowDetailPage.tsx` (if ownership adjusted)
### Existing APIs used
1. `frontend/src/api/maintenanceSchedules.ts`
2. target list API module(s) if inline list selection/creation is implemented
---
## Out of Scope (unchanged)
1. Intake field DnD reorder.
2. Procedural undo/redo parity.
3. Step templates/presets.
4. Bulk step operations.
5. Backend schema/model changes for procedural steps.