Files
resolutionflow/docs/archive/2026-02-13-export-phase-b-design.md
chihlasm 350c977eda feat: add procedural flows with intake forms, navigation, and seed templates
Adds a new "procedural" tree type for linear step-by-step project workflows
(domain controller setup, M365 onboarding, VPN config, etc). Includes intake
form builder, two-panel step navigation, variable resolution, procedural
exports, 3 seed templates, and UI rename from "Trees" to "Flows".

Also archives 19 implemented plan docs and creates deferred features backlog.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 04:13:52 -05:00

3.7 KiB

Export Improvements Phase B — Design

Date: 2026-02-13 Depends on: Phase A (complete on feat/export-phase-a) Scope: B1 (Summary Block), B2 (Custom Step Markers), B3 (Detail Levels), B4 (Editable Preview)


Decisions Made

Question Decision
B1 summary form vs single editable preview Single editable preview (B4). No separate structured form for summary fields.
Detail levels standard/full only. Dropped "summary" level — primary users are engineers, not dispatchers.
Mid-session editable preview No. TreeNavigationPage keeps quick one-click copy. Editable preview is SessionDetailPage only.

1. Schema Changes

Add to SessionExport (backend + frontend):

include_summary: bool = False
detail_level: Literal["standard", "full"] = "standard"

No database migration needed — these are export-time options only.


2. Custom Step Differentiation (B2)

Detect custom steps by checking node_id.startswith("custom-") in each decision dict.

Markdown:

### Step 5: [CUSTOM] Check Additional Event Logs
*Custom step added by engineer*

Text:

5. [CUSTOM] Check Additional Event Logs

HTML:

<span style="background: #7c3aed; color: white; padding: 2px 6px; border-radius: 3px; font-size: 0.75em; margin-right: 6px;">CUSTOM</span>

PSA:

5. [CUSTOM] Check Additional Event Logs -> ...

Pure backend change — all 4 generators in export_service.py.


3. Summary Block (B1)

When include_summary=True, insert a Summary section after metadata, before Evidence/Steps.

Auto-populated fields:

Field Source
Issue Tree name + description
Impact [Edit in preview] placeholder
Status "Resolved" if completed, else "In Progress — paused at step N"
Resolution outcome_notes if available
Next Steps next_steps if available

Blank/placeholder fields are editable in the preview modal (B4). Format varies by generator (markdown table, text key-value, HTML styled table, PSA --- SUMMARY --- section).

The summary block is opt-in (include_summary=False default), independent of detail level.


4. Detail Levels (B3)

Two levels:

  • standard (default): Current behavior, except command outputs >5 lines are truncated with *(full output omitted — N lines)*
  • full: No truncation. All command outputs, scratchpad, notes rendered completely.

Implementation: Helper function _truncate_command_output(output, max_lines=5) used in all 4 generators when detail_level="standard".

Frontend: Dropdown on SessionDetailPage export controls — "Standard" / "Full Detail".


5. Editable Preview (B4)

Modify ExportPreviewModal:

  • Replace read-only <pre> with editable <textarea>
  • Local state editedContent initialized from content prop
  • "Copy" copies editedContent
  • "Download" downloads editedContent
  • "Reset" button restores original content
  • "Include Summary" checkbox re-fetches export with include_summary=true
  • Edits are NOT saved back to the session

Only applies to SessionDetailPage. TreeNavigationPage keeps instant "Copy for Ticket" behavior.


Files Affected

Backend:

  • backend/app/schemas/session.py — Add include_summary, detail_level to SessionExport
  • backend/app/services/export_service.py — All 4 generators: custom step markers, summary block, command output truncation

Frontend:

  • frontend/src/types/session.ts — Add include_summary, detail_level to SessionExport
  • frontend/src/components/session/ExportPreviewModal.tsx — Editable textarea, reset, summary toggle
  • frontend/src/pages/SessionDetailPage.tsx — Detail level dropdown, pass new options to export calls

No migration needed.