Record the maintainer's answers for items 49, 50, 55 and 65 #157
+2
-1
@@ -496,7 +496,8 @@ exits 0 on.
|
|||||||
while `todo.md` items 59, 60, 61 and 62 are open.
|
while `todo.md` items 59, 60, 61 and 62 are open.
|
||||||
|
|
||||||
A four-seat comprehension panel scored the project under the floor of 7. Its round-5 scores
|
A four-seat comprehension panel scored the project under the floor of 7. Its round-5 scores
|
||||||
(2026-10-03) are the baseline: a later panel may not score lower on any dimension.
|
(2026-10-03) are the baseline. Since 2026-10-04, a chunk whose panel scores any dimension lower
|
||||||
|
improves what the seats named and scores again, and after three such rounds asks the maintainer.
|
||||||
|
|
||||||
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|
||||||
|---|---|---|---|---|---|
|
|---|---|---|---|---|---|
|
||||||
|
|||||||
@@ -26,13 +26,13 @@
|
|||||||
|---|---|---|---|---|---|---|---|---|---|
|
|---|---|---|---|---|---|---|---|---|---|
|
||||||
| 63 | 0.2.0 | defect | **Refuse a cyclic input as `not-an-adf-document`.** | 2 | 2 | 6 | 9 | 1 | 27.5 |
|
| 63 | 0.2.0 | defect | **Refuse a cyclic input as `not-an-adf-document`.** | 2 | 2 | 6 | 9 | 1 | 27.5 |
|
||||||
| 7 | 0.2.0 | | **Ship HTML: `adfToHtml`, `htmlToAdf`, and `markdownToHtml` / `htmlToMarkdown` composed through ADF.** | 6 | 9 | 9 | 9 | 2, 3 | 25.8 |
|
| 7 | 0.2.0 | | **Ship HTML: `adfToHtml`, `htmlToAdf`, and `markdownToHtml` / `htmlToMarkdown` composed through ADF.** | 6 | 9 | 9 | 9 | 2, 3 | 25.8 |
|
||||||
| 55 | 0.2.0 | defect | **Spell through the carry every document the emitter refuses today for a carriage return, a NUL, a code-span line start, a newline inside an emoji, mention or status, or a text node whose text is empty or missing, or which holds content.** | 5 | 5 | 7 | 9 | 1 | 25.8 |
|
| 55 | 0.2.0 | defect | **Spell every document the emitter refuses today for a carriage return, a NUL, a code-span line start, a newline inside an emoji, mention or status, or a text node whose text is empty or missing, or which holds content.** | 5 | 5 | 7 | 9 | 1 | 25.8 |
|
||||||
| 45 | 0.2.0 | | **Replace `isAdfDocument` with a reader returning `Result<AdfDocument>`.** | 2 | 3 | 6 | 8 | 1 | 25.2 |
|
| 45 | 0.2.0 | | **Replace `isAdfDocument` with a reader returning `Result<AdfDocument>`.** | 2 | 3 | 6 | 8 | 1 | 25.2 |
|
||||||
| 6 | 0.2.0 | decision | **Specify the HTML dialect.** | 2 | 6 | 7 | 8 | 2, 3 | 24.7 |
|
| 6 | 0.2.0 | decision | **Specify the HTML dialect.** | 2 | 6 | 7 | 8 | 2, 3 | 24.7 |
|
||||||
| 64 | 0.2.0 | defect | **Read back unchanged on V8 every JSON key the emitter writes, with a fixture whose key holds `\`, `"` or a control character.** | 4 | 4 | 6 | 8 | 1, 7 | 23.0 |
|
| 64 | 0.2.0 | defect | **Read back unchanged on V8 every JSON key the emitter writes, with a fixture whose key holds `\`, `"` or a control character.** | 4 | 4 | 6 | 8 | 1, 7 | 23.0 |
|
||||||
| 43 | 0.2.0 | decision | **Give each markdown input its own reader, strict to its own standard.** | 6 | 7 | 8 | 9 | 3, 4 | 22.3 |
|
| 43 | 0.2.0 | decision | **Give each markdown input its own reader, strict to its own standard.** | 6 | 7 | 8 | 9 | 3, 4 | 22.3 |
|
||||||
| 65 | 0.2.0 | defect | **Read a mid-text or titled CommonMark image as Goal 6 allows.** | 5 | 5 | 7 | 7 | 3, 4, 6 | 18.7 |
|
| 65 | 0.2.0 | defect | **Read an image not alone in its paragraph as its alt text linked to its URL, and a titled image alone in its paragraph as the image captioned with its title.** | 5 | 5 | 7 | 7 | 3, 4, 6 | 18.7 |
|
||||||
| 49 | 0.2.0 | | **Read a list whose bullet or ordered delimiter changes as two lists in the CommonMark reader.** | 4 | 5 | 5 | 8 | 3, 4 | 17.2 |
|
| 49 | 0.2.0 | | **Read a list whose bullet or ordered delimiter changes as two lists, in both readers, and retire `!adf:listBreak`.** | 4 | 5 | 5 | 8 | 3, 4 | 17.2 |
|
||||||
| 61 | 0.2.0 | decision | **Have the emitter ask the inline reader how a line reads back, in place of `line-escaping.ts` predicting it.** | 6 | 8 | 3 | 8 | 1 | 14.0 |
|
| 61 | 0.2.0 | decision | **Have the emitter ask the inline reader how a line reads back, in place of `line-escaping.ts` predicting it.** | 6 | 8 | 3 | 8 | 1 | 14.0 |
|
||||||
| 52 | 0.2.0 | | **Spell `colwidth` as a comma list, `colwidth="340,420"`.** | 3 | 3 | 5 | 6 | 5 | 13.0 |
|
| 52 | 0.2.0 | | **Spell `colwidth` as a comma list, `colwidth="340,420"`.** | 3 | 3 | 5 | 6 | 5 | 13.0 |
|
||||||
| 51 | 0.2.0 | | **Match a reference label to its definition under Unicode case folding.** | 2 | 2 | 2 | 7 | 3, 4 | 12.4 |
|
| 51 | 0.2.0 | | **Match a reference label to its definition under Unicode case folding.** | 2 | 2 | 2 | 7 | 3, 4 | 12.4 |
|
||||||
@@ -70,16 +70,22 @@ Lands after items 6, 59, 60, 61 and 62. The CommonMark spec suite also runs agai
|
|||||||
`markdownToHtml`. The README documents HTML as it documents markdown, and its tagline and
|
`markdownToHtml`. The README documents HTML as it documents markdown, and its tagline and
|
||||||
`package.json`'s `description` regain HTML.
|
`package.json`'s `description` regain HTML.
|
||||||
|
|
||||||
### 55. Spell through the carry every document the emitter refuses today for a carriage return, a NUL, a code-span line start, a newline inside an emoji, mention or status, or a text node whose text is empty or missing, or which holds content.
|
### 55. Spell every document the emitter refuses today for a carriage return, a NUL, a code-span line start, a newline inside an emoji, mention or status, or a text node whose text is empty or missing, or which holds content.
|
||||||
|
|
||||||
`inline-line.ts` refuses a carriage return or NUL in text (`unspellable-character`) and a paragraph
|
Today `inline-line.ts` refuses a carriage return or NUL in text, and a NUL in an emoji, mention or
|
||||||
opening with a code-span run (`unspellable-line-start`); `fencedTexts` refuses the same characters
|
status (`unspellable-character`); and a paragraph opening with a code-span run
|
||||||
in a code block; `directive-syntax.ts` refuses a newline in an emoji, mention or status
|
(`unspellable-line-start`); `fencedTexts` refuses the same characters in a code block;
|
||||||
(`unspellable-whitespace`). The inline carry's JSON escapes all of them, so a lossless spelling
|
`inline-line.ts` refuses a newline in an emoji, mention or status (`unspellable-whitespace`);
|
||||||
exists, and §The code list says a cause the carry answers gets no code. Fixing it revises §Which
|
`inline-line.ts` and `fencedTexts` refuse a text node whose `text` is empty or missing, and
|
||||||
code a cause takes and §Markdown in is a canonical fixpoint, which the maintainer decides. Also a
|
`inline-line.ts` one holding `content`. The carries spell all of them: the inline carry in a
|
||||||
text node whose `text` is empty or missing, which `inline-line.ts` and `fencedTexts` refuse, or
|
paragraph, the block carry in a code block. Inline, a carriage return or NUL could ride
|
||||||
which holds `content`, which `inline-line.ts` refuses. Found by the README-goals audit, 2026-10-03.
|
`!adf:text{text="…"}` instead, which keeps the text readable — a writer panel picks.
|
||||||
|
|
||||||
|
The maintainer approved on 2026-10-04: §Markdown in is a canonical fixpoint drops its code-span
|
||||||
|
exception, §Which code a cause takes drops `unspellable-whitespace` as an emitter cause;
|
||||||
|
`unspellable-character` and `unspellable-line-start` retire. `unspellable-whitespace` stays, since
|
||||||
|
the reader raises it for a content slot spanning a newline. Found by the README-goals audit,
|
||||||
|
2026-10-03.
|
||||||
|
|
||||||
### 45. Replace `isAdfDocument` with a reader returning `Result<AdfDocument>`.
|
### 45. Replace `isAdfDocument` with a reader returning `Result<AdfDocument>`.
|
||||||
|
|
||||||
@@ -110,23 +116,28 @@ a code fence whose info string opens `adf:` becomes the block carry where Common
|
|||||||
caller names the markdown it hands in: CommonMark, read as its spec says, or the lossless flavour,
|
caller names the markdown it hands in: CommonMark, read as its spec says, or the lossless flavour,
|
||||||
read as `spec/flavour.md` says. Breaking: `MIGRATION.md` says which call a caller takes.
|
read as `spec/flavour.md` says. Breaking: `MIGRATION.md` says which call a caller takes.
|
||||||
|
|
||||||
### 65. Read a mid-text or titled CommonMark image as Goal 6 allows.
|
### 65. Read an image not alone in its paragraph as its alt text linked to its URL, and a titled image alone in its paragraph as the image captioned with its title.
|
||||||
|
|
||||||
A mid-text or titled image, such as a bot's `See  here`, is refused: 14 examples in
|
Both are refused today with `unmappable-image`: 14 examples in
|
||||||
`corpus/commonmark-spec/refusals.json`. Settle what such an image builds. Goal 6 drops form and
|
`corpus/commonmark-spec/refusals.json`, a bot's `See  here` among them. `mediaInline`
|
||||||
keeps the target.
|
takes only Atlassian media ids, never a URL. An image not alone in its paragraph reads as its alt
|
||||||
|
text, linked to its URL. Its title becomes the link's `title`. An empty alt text reads as the URL,
|
||||||
|
as item 50 reads an empty link. A titled image alone in its paragraph reads as the image, with its
|
||||||
|
title as a `caption` (the maintainer, 2026-10-04). By Goal 4, the lossless flavour reads both as
|
||||||
|
CommonMark does. An image inside a link, `[](/uri)` (spec example 517), would need
|
||||||
|
two links on one text node: the chunk settles which link the alt text keeps by Goal 6, and asks
|
||||||
|
where it does not decide.
|
||||||
|
|
||||||
### 49. Read a list whose bullet or ordered delimiter changes as two lists in the CommonMark reader.
|
### 49. Read a list whose bullet or ordered delimiter changes as two lists, in both readers, and retire `!adf:listBreak`.
|
||||||
|
|
||||||
Lands after item 43. Today `- a` then `+ b`, or `1.` then `1)`, reads as one list; CommonMark reads
|
Lands after item 43. Today `- a` then `+ b`, or `1.` then `1)`, reads as one list; CommonMark reads
|
||||||
two (spec examples 301 and 302), and so must the CommonMark reader. `spec/flavour.md` merges them in
|
two (spec examples 301 and 302). Goal 4 settles it for the lossless flavour too: CommonMark spells
|
||||||
the lossless flavour on purpose and parts two adjacent lists with `!adf:listBreak`. The chunk
|
adjacent lists by changing the marker, so `adfToMarkdown` and `adfToPlainMarkdown` alternate `-` and
|
||||||
settles by Goals 3 and 4 whether the flavour follows, and asks where the Goals do not decide. That
|
`*` between adjacent bullet lists and `.` and `)` between adjacent ordered lists, and
|
||||||
answer also settles what `adfToMarkdown` and `adfToPlainMarkdown` write for two adjacent lists, and
|
`!adf:listBreak` retires. `*` is the maintainer's pick (2026-10-04). Breaking, so it ships beside
|
||||||
whether `!adf:listBreak` still reads. Breaking, so it ships beside item 43: `MIGRATION.md`'s
|
item 43: `MIGRATION.md`'s Readings and Spellings tables gain their rows. Examples 301 and 302 lose
|
||||||
Readings table gains its row, and its Spellings table one if `!adf:listBreak` retires. Examples 301
|
their `pending` exceptions, and the spelling leaves the README's "Four CommonMark spellings" bullet,
|
||||||
and 302 lose their `pending` exceptions, and the spelling leaves the README's "Four CommonMark
|
which counts one fewer.
|
||||||
spellings" bullet, which counts one fewer.
|
|
||||||
|
|
||||||
### 61. Have the emitter ask the inline reader how a line reads back, in place of `line-escaping.ts` predicting it.
|
### 61. Have the emitter ask the inline reader how a line reads back, in place of `line-escaping.ts` predicting it.
|
||||||
|
|
||||||
@@ -167,9 +178,9 @@ mark spellings too, which item 7 moves where it learns what HTML shares.
|
|||||||
### 50. Read `[](/url)` and `[]()` as CommonMark's empty link.
|
### 50. Read `[](/url)` and `[]()` as CommonMark's empty link.
|
||||||
|
|
||||||
Both stay literal text today (spec examples 484 and 487). ADF holds no empty text node to carry a
|
Both stay literal text today (spec examples 484 and 487). ADF holds no empty text node to carry a
|
||||||
link mark, so the chunk settles what the empty link builds by Goals 3 and 6, and asks where they do
|
link mark, so a link whose text is empty takes its URL as its text (the maintainer, 2026-10-04):
|
||||||
not decide; whatever it builds, both still parse, since a bot relies on plain CommonMark being valid
|
`[](/url)` reads as `/url` linked to `/url`. `[]()` has no URL to show; the chunk settles it by Goals
|
||||||
input. Breaking, so it ships beside item 43: `MIGRATION.md`'s Readings table gains its row. Its
|
3 and 6. Breaking, so it ships beside item 43: `MIGRATION.md`'s Readings table gains its row. Its
|
||||||
`pending` exceptions go, and its spelling leaves the README's "Four CommonMark spellings" bullet,
|
`pending` exceptions go, and its spelling leaves the README's "Four CommonMark spellings" bullet,
|
||||||
which counts one fewer.
|
which counts one fewer.
|
||||||
|
|
||||||
@@ -178,8 +189,8 @@ which counts one fewer.
|
|||||||
Reading: the alert and task-marker reads in `parse/markdown-to-adf.ts`, the `mintTaskIds` call and
|
Reading: the alert and task-marker reads in `parse/markdown-to-adf.ts`, the `mintTaskIds` call and
|
||||||
the `inlineLeaves` use. Writing: `spellPlainBlock`, `quotedUnder`, `tryTaskList` and `taskBlocks` in
|
the `inlineLeaves` use. Writing: `spellPlainBlock`, `quotedUnder`, `tryTaskList` and `taskBlocks` in
|
||||||
`emit/adf-to-markdown.ts`. And `highlightDelimiter` and `highlightFlanking` move out of
|
`emit/adf-to-markdown.ts`. And `highlightDelimiter` and `highlightFlanking` move out of
|
||||||
`plain/conventions.ts`, which `emit/` imports them from; item 59 moves `Flavour`. Every comprehension reader on 2026-10-03
|
`plain/conventions.ts`, which `emit/` imports them from; item 59 moves `Flavour`. Every
|
||||||
named the plain flavour's spread across three directories.
|
comprehension reader on 2026-10-03 named the plain flavour's spread across three directories.
|
||||||
|
|
||||||
### 38. Spell a lone surrogate in a text node so it survives a UTF-8 encode.
|
### 38. Spell a lone surrogate in a text node so it survives a UTF-8 encode.
|
||||||
|
|
||||||
@@ -252,10 +263,9 @@ kB.
|
|||||||
|
|
||||||
Technical principle "One owner per value": the `Walk` record passes through twelve functions that
|
Technical principle "One owner per value": the `Walk` record passes through twelve functions that
|
||||||
mutate it and return `void`; `walk.leaf` alone is written in seven places. `ContainerStack` in the
|
mutate it and return `void`; `walk.leaf` alone is written in seven places. `ContainerStack` in the
|
||||||
same file shows the shape to follow.
|
same file shows the shape to follow. `inline-content.ts`'s `Scan` has the same shape: about fifteen
|
||||||
`inline-content.ts`'s `Scan` has the same shape: about fifteen functions write `pending`, `pieces`,
|
functions write `pending`, `pieces`, `deactivatedBefore` and `openingSpellableLink` and return
|
||||||
`deactivatedBefore` and `openingSpellableLink` and return `void`, and `parseInlineContent` reads a
|
`void`, and `parseInlineContent` reads a flag `scanInline` leaves on it.
|
||||||
flag `scanInline` leaves on it.
|
|
||||||
|
|
||||||
### 57. Make each `ci.sh` leg build what it reads, so one leg run alone tests the current tree.
|
### 57. Make each `ci.sh` leg build what it reads, so one leg run alone tests the current tree.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user