AI Skill Report Card

Extracting Markdown Tables

A-84·Sep 26, 2026·Source: Extension-selection
14 / 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.
13 / 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_NN entries 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.
17 / 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.
  • 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_mapper for nested structures).
  • Use \n as the sole row/record boundary signal — don't try to merge multi-line cells unless explicitly escaped with <br> or trailing backslash.
  • 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.
0
Grade A-AI Skill Framework
Scorecard
Criteria Breakdown
Quick Start
14/15
Workflow
13/15
Examples
17/20
Completeness
17/20
Format
14/15
Conciseness
14/15