Ask ChatGPT for a Markdown table that keeps every value in its column

If a ChatGPT table breaks when you paste it into a README, ask for the raw GitHub Flavored Markdown in a fenced code block. Specify the columns, preserve empty values, and require literal pipes inside cells to be escaped. Then preview the destination: a neatly aligned chat response does not establish that the pasted source has the right cells.

A small release matrix makes the problem visible. One command contains a pipe, one result is unknown, and another result contains a meaningful zero. Losing any of those distinctions changes the record.

Give the rows a fixed meaning

Use this fictional input to rehearse the transformation:

ID: A1
Command: build | inspect
Result: 0

ID: A2
Command: check
Result: not supplied

The intended table has exactly three columns and two data rows. Zero must remain 0. The missing result must remain explicitly unknown; it must not turn into a successful check.

| ID | Command | Result |
| --- | --- | --- |
| A1 | build \| inspect | 0 |
| A2 | check | Not supplied |

The backslash before the command's pipe keeps the command in one cell. In GFM, a pipe needs escaping even when it appears inside a code span within a table cell. The header and delimiter row must have the same number of cells. Body rows can be padded or have extra cells ignored by the parser, so a rendered table can conceal a malformed row. GFM table rules

Copy a prompt with the missing-value rule included

OpenAI's prompting guide recommends stating the task and supplying relevant context and examples. For a table conversion, the useful context is the destination format and what each input value means. OpenAI prompting guide

Convert the records below into a GitHub Flavored Markdown table.
Destination: [README / issue / other GFM-compatible destination].
Columns, in this order: [COLUMN NAMES].
Records: [PASTE RECORDS].

Return the raw Markdown in one fenced code block, with a blank line
before the table. Keep one source record per row and preserve IDs.
Escape literal pipes inside cells, including inside inline code.
Keep supplied zero, false, and empty-string values distinct.
Write "Not supplied" for a missing value. Do not invent facts,
measurements, statuses, owners, or links to fill gaps.
Do not add columns or merge separate records.
After the code block, report the source-record count and table-row
count, and list any input that could not fit without losing meaning.

Replace the missing-value wording if your destination has its own convention. Keep a separate symbol for a confirmed empty string when empty text is a real supplied value. Ask for clarification if the source does not distinguish empty from missing.

Check the source and the rendered result

Compare IDs before reading the prose: A1 and A2 must each occur once. Confirm that build | inspect stays in A1's command cell and that A1's result is still zero. A2 must say Not supplied.

Paste only the table source from inside the outer fence when you want a rendered table. Pasting the fence too displays the whole table as code. In your destination preview, inspect narrow-screen wrapping and open any actual links. For a long paragraph in one cell, move the explanation below the table and keep a short reference in the row.

The GitHub Markdown guide covers surrounding headings, code blocks, and task lists. If you are converting an existing web page rather than supplied records, use the HTML-to-Markdown workflow and compare the original structure too. Save the table only after its row identities and values match the input.

Keep reading