AI Skill Report Card
Extracting Markdown Tables
Quick Start14 / 15
Given a markdown file with a table or bulleted list, extract each row/item into a normalized record format:
Input:
Markdown| Name | Description | | ----- | ----- | | Excel to Markdown | Browser-local converter for XLSX, XLS, CSV to Markdown tables. | | Tablesmit | A minimalist, open-source table builder for analytical writing. |
Output:
TEXT[RECORD 01] FIELD_01: Excel to Markdown FIELD_02: Browser-local converter for XLSX, XLS, CSV to Markdown tables. [RECORD 02] FIELD_01: Tablesmit FIELD_02: A minimalist, open-source table builder for analytical writing.
Recommendation▾
Clarify the FIELD_NN naming convention's utility for downstream consumption vs. just retaining original header names as keys.
Workflow13 / 15
Progress:
- Step 1: Ingest source — read the markdown file or string as raw text
- Step 2: Isolate code blocks — mask fenced code (```) and inline backtick spans so their contents aren't mistaken for table/list syntax
- Step 3: Sweep boundaries — scan line-by-line for pipe tokens (
|), header separators (---,:---:), or bullet markers (-,*,+, numbered lists) - Step 4: Isolate payloads — split each qualifying line on unescaped
|(for tables) or strip leading bullet/number markers (for lists); trim whitespace from each cell - Step 5: Validate row balance — confirm every data row has the same cell count as the header row; pad short rows with empty strings, flag over-long rows
- Step 6: Regularize — map each row into sequential
FIELD_NNentries under a[RECORD NN]header - Step 7: Emit output — return the manifest as plain text, ready for downstream consumption
Recommendation▾
Add an example showing nested/code-block masking in action, not just described in prose, since it's called out as a key edge case.
Examples17 / 20
Example 1: Standard table Input:
Markdown| Tool | Type | License | |------|------|---------| | Alex | Linter | MIT | | Vale | Linter | Apache-2.0 |
Output:
TEXT[RECORD 01] FIELD_01: Alex FIELD_02: Linter FIELD_03: MIT [RECORD 02] FIELD_01: Vale FIELD_02: Linter FIELD_03: Apache-2.0
Example 2: Bulleted list (single-field records) Input:
Markdown- Excel to Markdown - Tablesmit - DocuPilot
Output:
TEXT[RECORD 01] FIELD_01: Excel to Markdown [RECORD 02] FIELD_01: Tablesmit [RECORD 03] FIELD_01: DocuPilot
Example 3: Imbalanced row (padding applied) Input:
Markdown| Name | Description | Version | |------|------|------| | Foo | Does things | 1.0 | | Bar | Missing version |
Output:
TEXT[RECORD 01] FIELD_01: Foo FIELD_02: Does things FIELD_03: 1.0 [RECORD 02] FIELD_01: Bar FIELD_02: Missing version FIELD_03: (empty — padded, flagged for review)
Recommendation▾
The workflow checklist boxes are unchecked by default — consider showing a completed example or removing checkbox styling since this is a reference doc, not a live task tracker.
Best Practices
- Always mask fenced/inline code blocks before scanning for delimiters — pipe or bullet characters inside code are not structural.
- Treat the second table row (the
---separator) as a signal, not data — discard it, don't emit it as a record. - Preserve original cell text verbatim after trimming; do not attempt semantic cleanup, rewriting, or type inference.
- When mixing nested bullets, only extract top-level items unless hierarchy preservation is explicitly requested (see
document_link_dependency_mapperfor nested structures). - Use
\nas the sole row/record boundary signal — don't try to merge multi-line cells unless explicitly escaped with<br>or trailing backslash.
Common Pitfalls
- Escaped pipes in cell content (
\|) will fracture columns if not unescaped/re-escaped correctly — check for\|before splitting. - Backtick-wrapped pipes (e.g.,
`a|b`) inside a cell will be misread as delimiters if code spans aren't isolated first. - Mixed bullet styles (
-,*,+) in the same list should still be treated as one record set — don't split them into separate manifests. - Trailing/leading empty cells from malformed tables (
| Name |with extra leading|) create phantom empty fields — strip these before counting columns. - Silent row-count mismatches — always flag (don't just pad) when a row's cell count deviates from the header, so downstream consumers know data may be incomplete.