Evaluation Plan to TMAP Converter
Convert Evaluation Plan CSV files into the official Datadog TMAP XLSX format. TMAP (Technical Mutual Activity Plan) is the same as Evaluation Plan, just in the official Datadog XLSX template format.
Supported Input Formats
Format A: creating-eval-plan Output (4 columns)
Depth,Title,Description,Success Criteria
Generated by the creating-eval-plan skill. The Depth column encodes hierarchy (e.g., 1, 1.1, 1.1.1).
Format B: Homerun Export (10 columns)
Depth Value,Status,Assignee,Due Date,Status Text,Roll up children's status,Name,Description,Success Criteria,Shared
Exported from Datadog's internal Homerun system. Contains additional tracking metadata (status, assignee, due dates).
Output Format
The official Datadog ENT/MM Mutual Action Plan XLSX template with 7 columns:
| Column |
Header |
| A |
Product Category |
| B |
Configuration Item |
| C |
Estimated Complete Time |
| D |
Responsible Party |
| E |
Target Completion Date |
| F |
Status |
| G |
Notes |
Read references/tmap-format-spec.md for the full formatting specification (colors, fonts, merged cells, column widths).
Core Workflow
Step 1: Read the Input CSV
Read the CSV file provided by the user. The user will provide the file path.
Step 2: Detect Format
Check the CSV header row:
- If header starts with
Depth,Title,Description,Success Criteria → Format A
- If header starts with
Depth Value,Status,Assignee,Due Date → Format B
Step 3: Parse Hierarchical Data
Parse each CSV row and classify by depth level:
- Depth level 1 (integer, e.g.,
1, 2, 3): Phase row
- Depth level 2 (one dot, e.g.,
1.1, 2.3): Category row (Product Category)
- Depth level 3+ (two+ dots, e.g.,
1.1.1, 2.3.4): Item row (Configuration Item)
Field mapping by format:
| Target |
Format A Source |
Format B Source |
| Title/Name |
Title column |
Name column |
| Description |
Description column |
Description column |
| Success Criteria |
Success Criteria column |
Success Criteria column |
| Status |
Default: Open |
Status column: Complete → Complete, anything else → Open |
| Responsible Party |
(empty) |
Assignee column (drop Not Assigned) |
| Target Completion Date |
(empty) |
Due Date column (drop No due date) |
Step 4: Read Format Spec
Read references/tmap-format-spec.md for the exact XLSX formatting specification.
Step 5: Generate Python Script
Write a Python script using openpyxl that creates the XLSX. The script must:
5a. Setup
import openpyxl
from openpyxl.styles import Font, PatternFill, Alignment
from openpyxl.utils import get_column_letter
If openpyxl is not installed, run pip3 install openpyxl first.
5b. Create Workbook and Sheet
- Sheet name:
Tech Config Plan
- Column widths: A=20.33, B=53.66, C=13.66, D=23.16, E=24.16, F=21.83, G=35.16
5c. Write Header Row (Row 1)
- Headers:
Product Category, Configuration Item, Estimated Complete Time, Responsible Party, Target Completion Date, Status, Notes
- Font: Bold, white color (
FFFFFF)
- Fill: Purple
674EA7
5d. Write Data Rows
Process the parsed CSV data in order:
For each Phase (depth level 1):
- Extract phase number: if the title contains
Phase N:, use N. Otherwise, assign phase index starting from 0.
- Col A:
Phase {N}
- Col B: the title after removing the
Phase N: prefix (strip leading/trailing whitespace)
- Font: Bold, white color
- Fill: Phase 0 →
9900FF, Phase 1 → 1E82FF, Phase 2+ → 9900FF
- Apply fill and font to all 7 columns in the row
For each Category (depth level 2 WITH depth-3+ children):
- Col A: the category title
- Font in A: Bold
- Fill in A: Light grey
F3F3F3
- Count the number of child items (depth 3+) under this category
- Merge Col A from this row through (this row + child count - 1), and place the first child item's data (B through G) on the same row as the category
- Alignment for merged A cells: vertical top, wrap text
For each Item (depth level 3+):
- Col B: item title
- Col D: Responsible Party (Format B only; skip "Not Assigned")
- Col E: Target Completion Date (Format B only; skip "No due date")
- Col F: Status (
Open or Complete)
- Col G: Notes, constructed as:
- Both Description and Success Criteria present →
{Description} | {Success Criteria}
- Only Description →
{Description}
- Only Success Criteria →
{Success Criteria}
- Neither → empty
Depth-2 rows with no depth-3 children (standalone items):
- These are NOT categories. They are regular items that happen to be at depth 2.
- Leave Col A blank (no text, no grey fill, no bold).
- Write the title in Col B only, with item data in C through G (Status, Notes, etc.).
5e. Save the XLSX
Save to the output path.
Step 6: Run the Script
Execute the Python script with python3.
Step 7: Report
Tell the user:
- Output file path
- Number of phases, categories, and items generated
- Any warnings (e.g., missing openpyxl, format detection issues)
Output Path
Ask the user where to save the generated XLSX file, or use the path they provide upfront.
Example
Given this Format A CSV:
Depth,Title,Description,Success Criteria
1,Phase 0: Scoping & Alignment,,
1.1,Technical Scope Validated,Validate PGW scope,All parties agree
1.2,Confirm Region,,Region confirmed
2,Phase 1: Sign Up,,
2.1,Sign Up,https://www.datadoghq.com/,Account created
3,Phase 2: Setup,,Configure monitoring
3.1,Infrastructure Monitoring,,Agents deployed
3.1.1,Deploy Agent on App Server 1,https://docs.datadoghq.com/agent/,Agent reporting
3.1.2,Deploy Agent on App Server 2,https://docs.datadoghq.com/agent/,Agent reporting
3.2,APM,,Traces visible
3.2.1,Install .NET Tracer,https://docs.datadoghq.com/tracing/,Traces in APM
Produces an XLSX where:
- Row 1: Header (purple
674EA7)
- Row 2: Phase 0 | Scoping & Alignment (purple
9900FF)
- Row 3: A=(blank), B=Technical Scope Validated (standalone depth-2, no children → item row)
- Row 4: A=(blank), B=Confirm Region (standalone depth-2, no children → item row)
- Row 5: Phase 1 | Sign Up (blue
1E82FF)
- Row 6: A=(blank), B=Sign Up (standalone depth-2 → item row, G=https://www.datadoghq.com/ | Account created)
- Row 7: Phase 2 | Setup (purple
9900FF)
- Row 8-9: A=Infrastructure Monitoring (merged 2 rows, grey fill) | B=Deploy Agent on App Server 1 (row 8) | B=Deploy Agent on App Server 2 (row 9)
- Row 10: A=APM (category with 1 child, no merge needed) | B=Install .NET Tracer
Validation
After generating the XLSX, verify:
- The file opens correctly in Excel/Google Sheets
- Phase rows have colored backgrounds and bold white text
- Category cells in Col A are merged correctly
- Status column shows "Open" or "Complete"
- Notes column contains Description and Success Criteria where available
1---2name: converting-evalplan-to-tmap3description: Convert Evaluation Plan CSV files into the official Datadog TMAP (Technical Mutual Activity Plan) XLSX format. Accepts two CSV input formats: (1) the 4-column CSV output from the creating-eval-plan skill (Depth, Title, Description, Success Criteria), or (2) the 10-column CSV exported from Homerun (Depth Value, Status, Assignee, Due Date, etc.). Produces a formatted XLSX matching the official ENT/MM Mutual Action Plan template with phases, categories, merged cells, and color-coded rows. Use when the user asks to convert an eval plan to TMAP, generate a TMAP XLSX, convert CSV to TMAP, or mentions "TMAP", "mutual action plan", or "convert eval plan to xlsx".4---56# Evaluation Plan to TMAP Converter78Convert Evaluation Plan CSV files into the official Datadog TMAP XLSX format. TMAP (Technical Mutual Activity Plan) is the same as Evaluation Plan, just in the official Datadog XLSX template format.910## Supported Input Formats1112### Format A: creating-eval-plan Output (4 columns)1314```15Depth,Title,Description,Success Criteria16```1718Generated by the `creating-eval-plan` skill. The `Depth` column encodes hierarchy (e.g., `1`, `1.1`, `1.1.1`).1920### Format B: Homerun Export (10 columns)2122```23Depth Value,Status,Assignee,Due Date,Status Text,Roll up children's status,Name,Description,Success Criteria,Shared24```2526Exported from Datadog's internal Homerun system. Contains additional tracking metadata (status, assignee, due dates).2728## Output Format2930The official Datadog ENT/MM Mutual Action Plan XLSX template with 7 columns:3132| Column | Header |33|--------|--------|34| A | Product Category |35| B | Configuration Item |36| C | Estimated Complete Time |37| D | Responsible Party |38| E | Target Completion Date |39| F | Status |40| G | Notes |4142Read `references/tmap-format-spec.md` for the full formatting specification (colors, fonts, merged cells, column widths).4344## Core Workflow4546### Step 1: Read the Input CSV4748Read the CSV file provided by the user. The user will provide the file path.4950### Step 2: Detect Format5152Check the CSV header row:53- If header starts with `Depth,Title,Description,Success Criteria` → **Format A**54- If header starts with `Depth Value,Status,Assignee,Due Date` → **Format B**5556### Step 3: Parse Hierarchical Data5758Parse each CSV row and classify by depth level:5960- **Depth level 1** (integer, e.g., `1`, `2`, `3`): Phase row61- **Depth level 2** (one dot, e.g., `1.1`, `2.3`): Category row (Product Category)62- **Depth level 3+** (two+ dots, e.g., `1.1.1`, `2.3.4`): Item row (Configuration Item)6364**Field mapping by format:**6566| Target | Format A Source | Format B Source |67|--------|-----------------|-----------------|68| Title/Name | `Title` column | `Name` column |69| Description | `Description` column | `Description` column |70| Success Criteria | `Success Criteria` column | `Success Criteria` column |71| Status | Default: `Open` | `Status` column: `Complete` → `Complete`, anything else → `Open` |72| Responsible Party | _(empty)_ | `Assignee` column (drop `Not Assigned`) |73| Target Completion Date | _(empty)_ | `Due Date` column (drop `No due date`) |7475### Step 4: Read Format Spec7677Read `references/tmap-format-spec.md` for the exact XLSX formatting specification.7879### Step 5: Generate Python Script8081Write a Python script using `openpyxl` that creates the XLSX. The script must:8283#### 5a. Setup8485```python86import openpyxl87from openpyxl.styles import Font, PatternFill, Alignment88from openpyxl.utils import get_column_letter89```9091If `openpyxl` is not installed, run `pip3 install openpyxl` first.9293#### 5b. Create Workbook and Sheet9495- Sheet name: `Tech Config Plan`96- Column widths: A=20.33, B=53.66, C=13.66, D=23.16, E=24.16, F=21.83, G=35.169798#### 5c. Write Header Row (Row 1)99100- Headers: `Product Category`, `Configuration Item`, `Estimated Complete Time`, `Responsible Party`, `Target Completion Date`, `Status`, `Notes`101- Font: Bold, white color (`FFFFFF`)102- Fill: Purple `674EA7`103104#### 5d. Write Data Rows105106Process the parsed CSV data in order:107108**For each Phase (depth level 1):**109- Extract phase number: if the title contains `Phase N:`, use N. Otherwise, assign phase index starting from 0.110- Col A: `Phase {N}`111- Col B: the title after removing the `Phase N:` prefix (strip leading/trailing whitespace)112- Font: Bold, white color113- Fill: Phase 0 → `9900FF`, Phase 1 → `1E82FF`, Phase 2+ → `9900FF`114- Apply fill and font to all 7 columns in the row115116**For each Category (depth level 2 WITH depth-3+ children):**117- Col A: the category title118- Font in A: Bold119- Fill in A: Light grey `F3F3F3`120- Count the number of child items (depth 3+) under this category121- Merge Col A from this row through (this row + child count - 1), and place the first child item's data (B through G) on the same row as the category122- Alignment for merged A cells: vertical top, wrap text123124**For each Item (depth level 3+):**125- Col B: item title126- Col D: Responsible Party (Format B only; skip "Not Assigned")127- Col E: Target Completion Date (Format B only; skip "No due date")128- Col F: Status (`Open` or `Complete`)129- Col G: Notes, constructed as:130 - Both Description and Success Criteria present → `{Description} | {Success Criteria}`131 - Only Description → `{Description}`132 - Only Success Criteria → `{Success Criteria}`133 - Neither → empty134135**Depth-2 rows with no depth-3 children (standalone items):**136- These are NOT categories. They are regular items that happen to be at depth 2.137- Leave Col A blank (no text, no grey fill, no bold).138- Write the title in Col B only, with item data in C through G (Status, Notes, etc.).139140#### 5e. Save the XLSX141142Save to the output path.143144### Step 6: Run the Script145146Execute the Python script with `python3`.147148### Step 7: Report149150Tell the user:151- Output file path152- Number of phases, categories, and items generated153- Any warnings (e.g., missing openpyxl, format detection issues)154155## Output Path156157Ask the user where to save the generated XLSX file, or use the path they provide upfront.158159## Example160161Given this Format A CSV:162163```csv164Depth,Title,Description,Success Criteria1651,Phase 0: Scoping & Alignment,,1661.1,Technical Scope Validated,Validate PGW scope,All parties agree1671.2,Confirm Region,,Region confirmed1682,Phase 1: Sign Up,,1692.1,Sign Up,https://www.datadoghq.com/,Account created1703,Phase 2: Setup,,Configure monitoring1713.1,Infrastructure Monitoring,,Agents deployed1723.1.1,Deploy Agent on App Server 1,https://docs.datadoghq.com/agent/,Agent reporting1733.1.2,Deploy Agent on App Server 2,https://docs.datadoghq.com/agent/,Agent reporting1743.2,APM,,Traces visible1753.2.1,Install .NET Tracer,https://docs.datadoghq.com/tracing/,Traces in APM176```177178Produces an XLSX where:179- Row 1: Header (purple `674EA7`)180- Row 2: Phase 0 | Scoping & Alignment (purple `9900FF`)181- Row 3: A=_(blank)_, B=Technical Scope Validated (standalone depth-2, no children → item row)182- Row 4: A=_(blank)_, B=Confirm Region (standalone depth-2, no children → item row)183- Row 5: Phase 1 | Sign Up (blue `1E82FF`)184- Row 6: A=_(blank)_, B=Sign Up (standalone depth-2 → item row, G=https://www.datadoghq.com/ | Account created)185- Row 7: Phase 2 | Setup (purple `9900FF`)186- Row 8-9: A=Infrastructure Monitoring (merged 2 rows, grey fill) | B=Deploy Agent on App Server 1 (row 8) | B=Deploy Agent on App Server 2 (row 9)187- Row 10: A=APM (category with 1 child, no merge needed) | B=Install .NET Tracer188189## Validation190191After generating the XLSX, verify:1921. The file opens correctly in Excel/Google Sheets1932. Phase rows have colored backgrounds and bold white text1943. Category cells in Col A are merged correctly1954. Status column shows "Open" or "Complete"1965. Notes column contains Description and Success Criteria where available