Plan canvas markdown renderer: language-tagged code fence not closed by a bare closing fence, breaking rest of document
- Linguagem predominante
- Shell
- Estrelas
- 11.2k
- Forks
- 1.9k
- Merge médio
- 14h 16min
- PRs com merge (30d)
- 6
Descrição
### Summary
In the desktop app's **Plan** canvas (the built-in markdown viewer/editor), a fenced code block that has a **language info-string on its opening fence** (e.g. ` ```csharp `) is not closed by a bare closing fence (` ``` `). The renderer treats the bare closing fence as content and leaves the code block "open," so **the entire remainder of the document renders as code** — headings (`##`), blockquotes (`>`), lists, and inline code all stop being parsed as markdown.
Per the [CommonMark spec §4.5](https://spec.commonmark.org/0.31.2/#fenced-code-blocks), a closing code fence **must not** carry an info string; a bare ` ``` ` is the *correct* way to close a ` ```csharp ` block. VS Code (and GitHub itself) render all the variations below correctly, so the file is valid — the app's renderer is non-conformant.
### Repro
Open any `.md` file in the app's **Plan** panel containing:
- Opening fence with a language tag (` ```csharp `)
- Some code lines
- A bare closing fence (` ``` `)
- Followed by a heading / blockquote / more markdown
Observed behavior by variant (same content, only the fences changed):
| Opening fence | Closing fence | App Plan renderer | VS Code |
| --- | --- | --- | --- |
| bare ` ``` ` | bare ` ``` ` | Minor glitch: a stray ` ``` ` line leaks out, but content after the block recovers | ✅ correct |
| ` ```csharp ` | bare ` ``` ` | **Broken: bare closer not matched → the block never closes and the entire rest of the document renders as code** | ✅ correct |
| 4-space indented block (no fences) | n/a | ✅ correct | ✅ correct |
### Expected
A bare ` ``` ` closing fence should close a language-tagged opening fence (` ```csharp `), matching CommonMark and VS Code. Content after the block should resume normal markdown parsing.
### Actual
The language-tagged block is only closed by an identically-tagged fence; a spec-correct bare closer is swallowed as content, breaking rendering for everything below the block.
### Workaround
- Use an indented (4-space) code block instead of a fenced one, **or**
- Omit the language info-string so both fences are bare (this still leaks a stray ` ``` ` line but at least doesn't break the rest of the doc).
### Environment
- GitHub Copilot desktop app, version 1.0.71
- OS: Windows 11
- Surface: **Plan** canvas (markdown viewer/editor), `media=text/markdown`
### Notes
Screenshots demonstrating all three variants (app vs. VS Code side-by-side) are available and can be attached to this issue.
Guia de contribuição
Direção de pesquisa
Comece reproduzindo o problema no painel Plan do aplicativo para desktop com um arquivo Markdown contendo uma fence de abertura com tag de linguagem, uma fence de fechamento sem tag e conteúdo Markdown depois dela. A correção estará concluída quando a fence de fechamento sem tag encerrar o bloco fenced e os títulos, blockquotes, listas e código inline subsequentes forem renderizados normalmente, de acordo com CommonMark e VS Code.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- markdown
- Domínio
- content, desktop
- Tipo de issue
- Bug
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Status de atividade
- Pouca atividade
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 55/100