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>
This commit is contained in:
chihlasm
2026-02-14 04:13:52 -05:00
parent 303570ca2c
commit 350c977eda
58 changed files with 11686 additions and 167 deletions

View File

@@ -28,6 +28,10 @@ class Tree(Base):
"status IN ('draft', 'published')",
name='ck_trees_status'
),
CheckConstraint(
"tree_type IN ('troubleshooting', 'procedural')",
name='ck_trees_tree_type'
),
)
id: Mapped[uuid.UUID] = mapped_column(
@@ -47,7 +51,20 @@ class Tree(Base):
nullable=True,
index=True
)
tree_type: Mapped[str] = mapped_column(
String(20),
nullable=False,
default='troubleshooting',
server_default='troubleshooting',
index=True,
comment="Tree type: troubleshooting (branching decision tree) or procedural (linear step-by-step flow)"
)
tree_structure: Mapped[dict[str, Any]] = mapped_column(JSONB, nullable=False)
intake_form: Mapped[Optional[list[dict[str, Any]]]] = mapped_column(
JSONB,
nullable=True,
comment="Intake form field definitions for procedural flows (JSONB array)"
)
author_id: Mapped[Optional[uuid.UUID]] = mapped_column(
UUID(as_uuid=True),
ForeignKey("users.id"),