7.1 KiB
7.1 KiB
Create Document from Template (YAML Driven)
Purpose
Create documents using YAML templates to drive interactive, section-by-section collaboration between AI and user.
Core Rules
- NEVER output YAML - Final document contains only clean markdown
- Interactive by default - Work section-by-section unless YOLO mode
- YAML template drives all behavior - Parse template, follow instructions exactly
- Apply elicitation when specified - Use advanced elicitation for marked sections
- Present sections cleanly - Show content for review, then apply elicitation if flagged
YAML Template Format
Templates are full YAML files with this structure:
template:
id: template-name
name: Human Readable Name
output:
format: markdown
filename: docs/output.md
title: "{{variable}} Document Title"
sections:
- id: section-id
title: Section Title
instruction: "Detailed guidance for this section"
elicit: true
condition: "has ui"
choices:
repository: [Monorepo, Polyrepo]
Processing Flow
1. Parse YAML Template
- Load template metadata (id, name, output settings)
- Extract
sectionslist (required) - Note any section with
elicit: true,condition: "text",choices, orrepeatable: true - Handle nested sections for complex document structure
- For repeatable sections, use the template structure defined in the section
2. Set User Preferences
Interaction Mode: Currently Interactive (type #yolo to toggle to YOLO mode)
Output Location: Confirm file output location from template (e.g., docs/prd.md). If environment doesn't support file writing (like web UI), will keep content in chat until complete.
3. Process Each Section
For each section in order:
Interactive Mode:
- Skip if condition unmet - If
condition: "has ui"and project has no UI, skip entirely - Draft section content - Use section
instructionand handle choices/variables - Handle repeatable sections - If section has
repeatable: true, generate multiple instances based on nested structure - Present to user - Show clean section content for review
- Provide detailed rationale - Include thoughtful analysis highlighting (for example):
- Interesting or questionable decisions made
- Trade-offs and choices (what was chosen over alternatives and why)
- Areas that might need user attention or validation
- Key assumptions made during drafting
- Get user feedback - Accept changes or proceed
- Apply elicitation if specified - If
elicit: true, present standardized 1-9 options:- Option 1: Always "Proceed to next section"
- Options 2-9: MUST select 8 relevant methods from data/elicitation-methods (never create new ones)
- Include "Select 1-9 or just type your question/feedback:" to allow free chat
- Process elicitation results - After user selects elicitation method, present results with options:
- Option 1: "Apply suggested changes and update section"
- Option 2: "Return to elicitation selection (2-9 options)"
- Free text: "Ask questions or follow-ups about this elicitation"
- Allow multiple elicitation rounds on same section
- Save to document - If document-as-we-go mode, append approved content to file
- Continue to next section
YOLO Mode:
- Process all sections at once, then present complete document
4. Final Output
- Present complete document with clean markdown only
- Save to file if specified
- No YAML, no template syntax, no processing instructions
Section Types
Simple section:
- id: requirements
title: Requirements
instruction: "Draft functional (FR1, FR2...) and non-functional (NFR1, NFR2...) requirements"
Section with elicitation:
- id: technical-assumptions
title: Technical Assumptions
instruction: "Gather technical decisions that will guide the Architect"
elicit: true
choices:
architecture: [Monolith, Microservices, Serverless]
Conditional section:
- id: ui-goals
title: User Interface Goals
instruction: "High-level UI/UX vision and design goals"
condition: "has ui requirements"
elicit: true
Repeatable section with nested structure:
- id: epic-details
title: Epic {{epic_number}} {{epic_title}}
instruction: "Epic guidance with story and criteria requirements"
elicit: true
repeatable: true
sections:
- id: story
title: Story {{epic_number}}.{{story_number}} {{story_title}}
repeatable: true
template: "As a {{user_type}}, I want {{action}}, so that {{benefit}}."
sections:
- id: criteria
title: Acceptance Criteria
type: numbered-list
item_template: "{{criterion_number}}: {{criteria}}"
repeatable: true
Elicitation Loop
When user selects an elicitation method (options 2-9), follow this pattern:
- Execute the selected elicitation method from data/elicitation-methods
- Present results with insights and suggestions
- Provide follow-up options:
- 1. Apply suggested changes and update section
- 2. Return to elicitation selection (show 2-9 options again)
- Free text: Ask questions or follow-ups about this elicitation
- Allow multiple rounds - User can run multiple elicitation methods on the same section
- Only proceed to next section when user explicitly chooses option 1 from the main menu
Output Modes
Document-as-we-go (Recommended):
- Each approved section gets written to the document file immediately
- User can see document building in real-time
- Protects against context loss or chat restart
- File always contains latest approved content
Chat-only:
- All content stays in chat memory until document is complete
- Full document presented at end
- Risk of losing work if context runs out
Template Processing
- Load YAML template - Parse template metadata and sections
- Set document title - Use template.output.title with variables
- Process sections in order - Handle conditions, repeatability, nesting
- Apply instructions - Use section.instruction for guidance
- Handle variables - Replace {{variable}} placeholders
- Process choices - Present options from choices object
- Generate content - Create markdown following section structure
Error Prevention
❌ Don't:
- Show YAML in final output
- Skip conditional checks
- Ignore elicitation flags
- Output template syntax
- Apply elicitation before user approves elicitation content
✅ Do:
- Process sections in order
- Present clean content only
- Apply elicitation AFTER user approves section content
- Handle choice objects properly
- Generate repeatable sections dynamically
- Skip sections where conditions aren't met
- Save to document file when in document-as-we-go mode
Key Improvements
- YAML templates provide much richer structure than front matter
- Document-as-we-go protects against context loss
- Elicitation after approval ensures quality content first
- Structured choices replace inline {choice1|choice2} syntax
- Nested sections support complex document hierarchies