---
id: 382214e0-86e3-4a06-851f-6d00e9d429ca
title: 'Markdown: enable GFM tables + task lists + strikethrough (Options::empty() disables them)'
state: closed
labels:
- ui
assignees: []
milestone: null
created: 2026-10-27T15:27:05.553529409Z
updated: 2026-10-27T16:04:34.629168266Z
---
`markdown_to_html` uses `Options::empty()`, so **GFM features are off**. Most visible consequences:

1. **Tables render as literal pipes.** `agents.html` shows:
   `| field | rule | |------|------| | `title` | required, plain text, <=300 chars | …`
   Any README/wiki/issue with a table is unreadable.
2. **Task lists render as literal `[ ]`** — `.forge` issues use `- [ ]` checklists everywhere (see any issue page).
3. No strikethrough, no autolinks (`https://…` stays plain text), no footnotes.

This is the cheapest perceived-quality win in the batch: three option flags.

### Scope
- `Options::ENABLE_TABLES | ENABLE_TASKLISTS | ENABLE_STRIKETHROUGH | ENABLE_FOOTNOTES` (drop footnotes if it complicates the CSS budget; tables + task lists + strikethrough are the must-haves; add `ENABLE_GFM`? check the pulldown-cmark 0.13 API).
- Style them: `table` (border-collapse, `--border`, `--bg-th` header like the existing data tables), `th/td` padding matching the file tables, `input[type=checkbox]` inline + disabled look (no JS), `del` in `--fg-dim`, `.footnotes` small.
- Task list checkboxes: pulldown-cmark emits `<input disabled type="checkbox">`; ensure they are `disabled` (they are) and don't inherit the big form input styling.
- **Do the URL scheme filter from #62 in the same pass** — same `Event`/`Tag` mapping function, one edit.
- Tests: table → `<table>`; `- [x]` → checked checkbox; `~~x~~` → `<del>`; `https://x` linkified only if autolinks enabled.

### Acceptance
- [ ] `agents.html` renders a real table
- [ ] task-list items show checkboxes (checked/unchecked)
- [ ] blockquote/table inside lists still looks right
- [ ] `javascript:` links blocked (see #62)
- [ ] new table CSS stays inside the (raised) CSS budget
