Skip to content

fix(content): render kramdown's --- em dashes as em dashes - #1070

Merged
jordanrburger merged 8 commits into
mainfrom
docs/em-dash-prose
Aug 5, 2026
Merged

jordanrburger merged 8 commits into
mainfrom
docs/em-dash-prose

Conversation

@Iamfle4ka

Copy link
Copy Markdown
Collaborator

Stacked on #1069 (base branch is docs/em-dash-headings, not main) — same bug class, one page vs. the whole corpus. Merge #1069 first and this rebases to a clean 57-file diff.

#1069 fixed 12 headings. The same kramdown shorthand is all over body text: "Extractor --- a component designed to bring data into Keboola Storage". Kramdown rendered that as an em dash; Starlight's SmartyPants converts -- but leaves --- alone, so 310 places on 57 pages show three literal hyphens on production right now.

Changes:

  • --- → — in prose, in four shapes kramdown left behind: a --- b, the same with a stray extra space, a line-final --- whose sentence continues on the next line (- **Fields/Endpoint Nesting** ---), and a line-initial --- continuing the previous line (GoodData writer).
  • One anchor of the same family: /management/project/limits/ linked to #project-power---time-credits, but the heading Project Power -- Time Credits slugs to #project-power--time-credits — SmartyPants eats the --. Link fixed; heading left alone because it already renders correctly.

Deliberately untouched:

  • -- — 430 places. SmartyPants already renders it as an em dash (/management/project/limits/ ships Project Power — Time Credits today), so those pages are correct as written. Rewriting them would be pure churn.
  • --- inside fenced code (a -- Snowflake only --- not supported in DuckDB SQL comment in the DuckDB migration guide), table delimiter rows, frontmatter delimiters, horizontal rules, inline code.
  • No heading text changed anywhere in this PR, so no heading id moved.

Verified against astro build (production build, clean worktree off upstream/main):

  • The only literal --- left in 500 rendered pages is the one inside that SQL code block.
  • Spot-checked rendering: registry — and are, Fields/Endpoint Nesting —, and the GoodData continuation line joins as connector\n— unless it is used….
  • audit-phase2: 45 broken internal links / 0 missing images / 3 multiple-h1 / 0 unclosed fences / 0 malformed tables — identical to main.
  • Anchor resolution measured on both builds with a one-off checker (audit-phase2 doesn't check anchors — that's how PRDCT-543: Extending Keboola as its own top-level section #1046 shipped bad ones): 8496 anchors across 500 pages, 75 broken before → 74 after, the single difference being the link fixed here.

Worth a separate ticket: those 74 pre-existing broken anchors are mostly dev-era targets that #1046 carried over — e.g. /extend/component/running/#preparing-the-data-folder (the id is #preparing-data-folder), …/manifest-files/#dataouttables-manifests, /extend/component/tutorial/#creating-a-deployment-account. Happy to do them as a follow-up sweep.

Body text across the migrated pages still used kramdown's `---` shorthand
("Extractor --- a component designed to…"). Kramdown turned that into an em
dash; Starlight's SmartyPants converts `--` but leaves `---` alone, so 310
places on 57 pages render three literal hyphens in production today.

Replaced with a real em dash. Four shapes were in use — `a --- b`, the same
with a stray extra space, a line-final `---` whose sentence continues on the
next line, and a line-initial `--- ` continuing the previous line — all of them
now ` — `.

Deliberately untouched:
- ` -- ` (430 places). SmartyPants already renders it as an em dash, so those
  pages are correct as written; rewriting them would be churn.
- `---` inside fenced code (a SQL comment in the DuckDB migration guide), table
  delimiter rows, frontmatter delimiters, and horizontal rules.

Also fixed one anchor of the same family: `/management/project/limits/` linked
to `#project-power---time-credits`, while the heading `Project Power -- Time
Credits` slugs to `#project-power--time-credits` (SmartyPants ate the `--`).

Verified against `astro build`: the only literal `---` left in the rendered
HTML is the one inside the SQL code block. audit-phase2 unchanged (45 broken
internal links / 0 missing images / 3 multi-h1 / 0 unclosed fences). Anchor
resolution measured on both builds — 8496 anchors checked, broken 75 → 74, the
one difference being the link fixed here; no heading text and therefore no id
changed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 3, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
connection-docs Ready Ready Preview Aug 5, 2026 8:27pm

Request Review

Both surfaced by the fact-check pass over the sweep:

- `/transformations/`: `**Script** ---[Python]` had no space after the dashes,
  so none of the four shapes matched it. It renders as a literal `---` in the
  build (checked, not assumed) — now ` — `.
- `/extend/component/ui-options/configuration-schema/examples/`: the page links
  to its own `#example-1---object-blocks-loading-options`, but the heading uses
  an **en** dash and slugs to `#example-1--object-blocks-loading-options`. Same
  one-character fix as the limits anchor.

Anchor check after the rebuild: 8496 anchors, broken 74 → 73. No literal `---`
left in any rendered page outside the SQL code block.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Iamfle4ka

Copy link
Copy Markdown
Collaborator Author

Follow-up commit after the fact-check pass — two stragglers of the same family:

  • /transformations/: **Script** ---[Python] had no space after the dashes, so none of the four shapes caught it. Confirmed in the build that it rendered a literal ---; now —.
  • /extend/component/ui-options/configuration-schema/examples/: the page links to its own #example-1---object-blocks-loading-options, but that heading uses an en dash and slugs to #example-1--object-blocks-loading-options. Same one-character fix as the limits anchor.

Anchor check after the rebuild: 8496 anchors, 74 → 73 broken. audit-phase2 still identical to main (45 / 0 / 3 / 0 / 0). No literal --- left in any of the 500 rendered pages outside the SQL code block.

Anchor targets were never validated by CI — audit-phase2 checks link *paths*
but not the `#fragment` — so every heading rename since the Jekyll days left a
link pointing at nothing. A checker over the built site found 73; this fixes all
of them. Grouped by cause:

- **Heading renamed, article dropped** (~30): `#inviting-a-user` →
  `#inviting-user`, `#running-a-component` → `#running-component`,
  `#preparing-the-data-folder` → `#preparing-data-folder`, and so on.
- **Section moved to another page** (11): the manifest-files hub became one page
  per manifest kind (`#dataouttables-manifests` → `out-tables-manifests/`);
  `/storage/file-uploads/#limits` → `/storage/files/#limits`;
  `/transformations/{python,r}/#development-tutorial` → the `-plain` pages —
  those three paths are redirect stubs, so the anchor never survived the hop.
- **Section is gone** (10): `#new-transformations` (5 links) and
  `/management/jobs/#jobs` now link the page itself; `#main-header` was a Jekyll
  top-of-page artifact.
- **Starlight has no `{#id}` heading syntax** (1 page): telemetry-dashboards
  wrote `### Organization Usage {#ac-organization-usage}` to disambiguate two
  same-named sections. Starlight rendered the braces *literally* on the page and
  slugged them into the id. Renamed to "Organization Usage (Activity Center)",
  which keeps the sections distinct and gives the link a real target.
- **Nothing to point at** (3): the Phases/Dependencies cells in the
  transformations comparison table and "output buffering" in the implementation
  notes are now plain text — the sections they referenced don't exist anywhere.
  Flagged in the PR for someone who knows the original intent.
- **A link that was never a link**: `/overview/` shipped
  `our Flows [/tutorial/automate/#main-header], obtaining` as literal text.

Verified with `astro build`: **73 → 0** broken anchors out of 8476 checked
across 500 pages. audit-phase2 unchanged on every category (45 broken internal
links / 0 missing images / 3 multi-h1 / 0 unclosed fences / 0 malformed tables);
its old-docs-smell count goes 99 → 101 for the two `developers.keboola.com/#development-project`
links, the one target with no help equivalent yet — deliberate, and they match
the sibling link already in `/tutorial/`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Nikita and others added 3 commits August 4, 2026 02:09
The sweep resolved every anchor, but the fact-check found better homes for a
few. All verified against the build:

- `/workspace/table-export/`: "returns a standard asynchronous storage job" →
  `/storage/jobs/`, the page that defines the concept, instead of
  `/management/jobs/#storage-jobs`, which is a UI walkthrough.
- `/management/project/limits/` (2 links): how table size is measured →
  `/storage/#storage-data`, where "backend" is defined. The section I had used,
  Storage Backend Types and Features, is about tenancy models (MT/KBDB/BYODB).
- `/overview/`: the Flows mention now goes to `/flows/`, matching the same
  page's other two Flows links, rather than to the Part 4 tutorial.
- MySQL binlog note: the original `#mysql-purges-binlog-files-used-by-debezium`
  was copied verbatim from Debezium's own docs and refers to the *failure mode*
  (connector stops too long → server purges the binlog → new snapshot needed).
  Our `### Functionality` only says snapshots exist because MySQL purges
  binlogs, and nothing in-repo covers the failure mode, so the link goes
  upstream to Debezium.
- Five `[advanced mode](…/sqldb/)` links pick up `#advanced-mode`, the anchor
  sqldb's own prose already uses.

Anchors still 0 broken (8480 checked); audit-phase2 unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
fix(links): repoint the 73 stale anchors left by the Jekyll/dev era

@jordanrburger jordanrburger left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving. Same verification as #1069 — /catalog/multi-project/ renders separate project --- Oracle literally today and ora-history — The source database correctly, so the -- vs --- split holds up.

I attributed the diff by file to check scope: 301 removed lines carrying --- across 58 files, which matches your description. Leaving the 430 -- instances alone because they already render fine, and not touching any heading text so no slug moves — both are the right call. Nice restraint.

Blocked on #1069, since your base is docs/em-dash-headings. Merge that first and this rebases clean.

Worth noting this PR is more load-bearing than the title suggests: it's also what carries #1072's 73 anchor fixes to main.

Resolves two conflicts created by merging #1069 (whose branch update brought
main forward while this branch was cut from the pre-update commit):

- components/extractors/other/index.md: kept main's Dark Sky deprecation note
  and applied this branch's em-dash fix to all eight list entries.
- management/notifications/notifications.md: kept main's rewritten flow
  notification section, which supersedes the old bullets and already uses real
  em dashes.

Verified: 0 literal `---` remain in prose across src/content/docs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@jordanrburger
jordanrburger merged commit 5b9f8fd into main Aug 5, 2026
3 checks passed
@jordanrburger
jordanrburger deleted the docs/em-dash-prose branch August 5, 2026 20:28
Iamfle4ka pushed a commit that referenced this pull request Aug 6, 2026
…ic Extractor pages

The pages this PR migrates predate #1070's corpus-wide sweep, so they would
reintroduce the literal `---` the sweep just removed. Same transformation,
same scope rule: prose dashes only, nothing inside code fences.

This branch was successfully deployed

1 active deployment
Preview — 726ab77e Deployed Aug 5, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants