Skip to content

Commit 697ff01

Browse files
committed
gate that a list item's composed verbatim run renders the same after formatting (fixes #200)
The defect this catches is output that renders differently from its input and is still a fixed point. Idempotence, reparse, the reading ledger and the confluence pairs all compare our output against ourselves, so a stable wrong answer satisfies every one of them; only an input-render against output-render comparison, made on documents deep enough for the item's extent to be decided wrong, can see it. A dedicated 700-document family rather than a new symbol in the list-shape alphabet. The incident's shape needs both a description-term opener and a verbatim-style attribute line, and two more symbols multiply the depth-5 product by 2.3, on the sweep that already owns most of the gate battery's wall time - for territory 700 documents reach directly. The family costs 0.33s standalone and does not move the suite's wall time, which is why it is default-tier rather than deep. 68 rows fail render-equality on this tree and are quarantined against #201: a lone + inside the attached verbatim run ends the run for our reader, the oracle keeps it open, and the lines after it are reflowed into one, destroying a newline inside the pre. All 68 are idempotent.
1 parent eadd0de commit 697ff01

5 files changed

Lines changed: 544 additions & 4 deletions

File tree

docs/harnesses.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,25 @@ Corpus witnesses carry an id rather than bytes, resolved through
513513
second copy free to disagree with the first. `tests/lib/divergence-witnesses.ts`
514514
is the loader, and it throws rather than skipping when an id stops resolving.
515515

516+
### The list-item composition family
517+
518+
`tests/conformance/list-item-composition.test.ts` is the only render-equality
519+
gate over list item EXTENTS: 700 documents crossing five item openers with four
520+
verbatim styles, seven mid-run constructs and five followers, each formatted
521+
once and compared source-render against output-render through the pinned oracle.
522+
It exists for output that renders differently from its input and is nevertheless
523+
a fixed point - the one defect class that idempotence, reparse, the reading
524+
ledger and the confluence pairs cannot see, because all four compare our output
525+
against ourselves. The file's own comment carries the 2026-09-05 incident it was
526+
built from and the condition (#185's retirement criterion over this territory)
527+
that would make it redundant; a green history is not that condition.
528+
529+
Pinned by `tests/conformance/list-item-composition-quarantine.json`, one entry
530+
per failing row in the `quarantine.json` format, exact in both directions. It
531+
holds 68 entries today, all of them #201. There is no triage script and
532+
deliberately so: 68 entries over a fixed 700-row product are regenerated by hand
533+
in one command, and a script for it is scaffolding the family does not need.
534+
516535
### `bun run triage` — the conformance sweep
517536

518537
Assesses every corpus case against the four differential properties and groups

tests/conformance/generated-sweep.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
/**
2-
* The vocabulary two generated sweeps share: how a realized grid is
3-
* crossed with the byte operators, and how a per-row manifest is read
4-
* back as a failing set to compare against.
2+
* The vocabulary the generated sweeps share: how a realized grid is
3+
* crossed with the byte operators (the two registry sweeps), and how
4+
* a per-row manifest is read back as a failing set to compare against
5+
* (every gate that pins one).
56
*
67
* Both are DECISIONS, not conveniences, which is why they are here
78
* once rather than in each sweep. "An operator that changed nothing
@@ -16,7 +17,9 @@
1617
* cluster keys, the manifest paths. Those differ on purpose.
1718
*
1819
* A LIBRARY module: `registry-sweep.ts` and `inline-sweep.ts` build
19-
* rows with it, and their default-tier gates compare with it.
20+
* rows with it, and every gate that pins a per-row failing set
21+
* compares with it - those two default tiers and
22+
* `list-item-composition.test.ts`.
2023
*/
2124
import { BYTE_OPERATORS } from "../../scripts/shape-registry-byte-operators.js";
2225
import type { QuarantineEntry } from "./quarantine.js";
Lines changed: 274 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,274 @@
1+
{
2+
"marker/listing/continuation/ordered": {
3+
"fails": ["fidelity"],
4+
"issue": "#201"
5+
},
6+
"marker/listing/continuation/term3": {
7+
"fails": ["fidelity"],
8+
"issue": "#201"
9+
},
10+
"marker/listing/continuation/text": {
11+
"fails": ["fidelity"],
12+
"issue": "#201"
13+
},
14+
"marker/literal/continuation/ordered": {
15+
"fails": ["fidelity"],
16+
"issue": "#201"
17+
},
18+
"marker/literal/continuation/term3": {
19+
"fails": ["fidelity"],
20+
"issue": "#201"
21+
},
22+
"marker/literal/continuation/text": {
23+
"fails": ["fidelity"],
24+
"issue": "#201"
25+
},
26+
"marker/source/continuation/ordered": {
27+
"fails": ["fidelity"],
28+
"issue": "#201"
29+
},
30+
"marker/source/continuation/term3": {
31+
"fails": ["fidelity"],
32+
"issue": "#201"
33+
},
34+
"marker/source/continuation/text": {
35+
"fails": ["fidelity"],
36+
"issue": "#201"
37+
},
38+
"marker/verse/continuation/ordered": {
39+
"fails": ["fidelity"],
40+
"issue": "#201"
41+
},
42+
"marker/verse/continuation/term3": {
43+
"fails": ["fidelity"],
44+
"issue": "#201"
45+
},
46+
"marker/verse/continuation/text": {
47+
"fails": ["fidelity"],
48+
"issue": "#201"
49+
},
50+
"ordered/listing/continuation/marker": {
51+
"fails": ["fidelity"],
52+
"issue": "#201"
53+
},
54+
"ordered/listing/continuation/term3": {
55+
"fails": ["fidelity"],
56+
"issue": "#201"
57+
},
58+
"ordered/listing/continuation/text": {
59+
"fails": ["fidelity"],
60+
"issue": "#201"
61+
},
62+
"ordered/literal/continuation/marker": {
63+
"fails": ["fidelity"],
64+
"issue": "#201"
65+
},
66+
"ordered/literal/continuation/term3": {
67+
"fails": ["fidelity"],
68+
"issue": "#201"
69+
},
70+
"ordered/literal/continuation/text": {
71+
"fails": ["fidelity"],
72+
"issue": "#201"
73+
},
74+
"ordered/source/continuation/marker": {
75+
"fails": ["fidelity"],
76+
"issue": "#201"
77+
},
78+
"ordered/source/continuation/term3": {
79+
"fails": ["fidelity"],
80+
"issue": "#201"
81+
},
82+
"ordered/source/continuation/text": {
83+
"fails": ["fidelity"],
84+
"issue": "#201"
85+
},
86+
"ordered/verse/continuation/marker": {
87+
"fails": ["fidelity"],
88+
"issue": "#201"
89+
},
90+
"ordered/verse/continuation/term3": {
91+
"fails": ["fidelity"],
92+
"issue": "#201"
93+
},
94+
"ordered/verse/continuation/text": {
95+
"fails": ["fidelity"],
96+
"issue": "#201"
97+
},
98+
"term-semi/listing/continuation/marker": {
99+
"fails": ["fidelity"],
100+
"issue": "#201"
101+
},
102+
"term-semi/listing/continuation/ordered": {
103+
"fails": ["fidelity"],
104+
"issue": "#201"
105+
},
106+
"term-semi/listing/continuation/term3": {
107+
"fails": ["fidelity"],
108+
"issue": "#201"
109+
},
110+
"term-semi/listing/continuation/text": {
111+
"fails": ["fidelity"],
112+
"issue": "#201"
113+
},
114+
"term-semi/literal/continuation/marker": {
115+
"fails": ["fidelity"],
116+
"issue": "#201"
117+
},
118+
"term-semi/literal/continuation/ordered": {
119+
"fails": ["fidelity"],
120+
"issue": "#201"
121+
},
122+
"term-semi/literal/continuation/term3": {
123+
"fails": ["fidelity"],
124+
"issue": "#201"
125+
},
126+
"term-semi/literal/continuation/text": {
127+
"fails": ["fidelity"],
128+
"issue": "#201"
129+
},
130+
"term-semi/source/continuation/marker": {
131+
"fails": ["fidelity"],
132+
"issue": "#201"
133+
},
134+
"term-semi/source/continuation/ordered": {
135+
"fails": ["fidelity"],
136+
"issue": "#201"
137+
},
138+
"term-semi/source/continuation/term3": {
139+
"fails": ["fidelity"],
140+
"issue": "#201"
141+
},
142+
"term-semi/source/continuation/text": {
143+
"fails": ["fidelity"],
144+
"issue": "#201"
145+
},
146+
"term-semi/verse/continuation/marker": {
147+
"fails": ["fidelity"],
148+
"issue": "#201"
149+
},
150+
"term-semi/verse/continuation/ordered": {
151+
"fails": ["fidelity"],
152+
"issue": "#201"
153+
},
154+
"term-semi/verse/continuation/term3": {
155+
"fails": ["fidelity"],
156+
"issue": "#201"
157+
},
158+
"term-semi/verse/continuation/text": {
159+
"fails": ["fidelity"],
160+
"issue": "#201"
161+
},
162+
"term2/listing/continuation/marker": {
163+
"fails": ["fidelity"],
164+
"issue": "#201"
165+
},
166+
"term2/listing/continuation/ordered": {
167+
"fails": ["fidelity"],
168+
"issue": "#201"
169+
},
170+
"term2/listing/continuation/term3": {
171+
"fails": ["fidelity"],
172+
"issue": "#201"
173+
},
174+
"term2/listing/continuation/text": {
175+
"fails": ["fidelity"],
176+
"issue": "#201"
177+
},
178+
"term2/literal/continuation/marker": {
179+
"fails": ["fidelity"],
180+
"issue": "#201"
181+
},
182+
"term2/literal/continuation/ordered": {
183+
"fails": ["fidelity"],
184+
"issue": "#201"
185+
},
186+
"term2/literal/continuation/term3": {
187+
"fails": ["fidelity"],
188+
"issue": "#201"
189+
},
190+
"term2/literal/continuation/text": {
191+
"fails": ["fidelity"],
192+
"issue": "#201"
193+
},
194+
"term2/source/continuation/marker": {
195+
"fails": ["fidelity"],
196+
"issue": "#201"
197+
},
198+
"term2/source/continuation/ordered": {
199+
"fails": ["fidelity"],
200+
"issue": "#201"
201+
},
202+
"term2/source/continuation/term3": {
203+
"fails": ["fidelity"],
204+
"issue": "#201"
205+
},
206+
"term2/source/continuation/text": {
207+
"fails": ["fidelity"],
208+
"issue": "#201"
209+
},
210+
"term2/verse/continuation/marker": {
211+
"fails": ["fidelity"],
212+
"issue": "#201"
213+
},
214+
"term2/verse/continuation/ordered": {
215+
"fails": ["fidelity"],
216+
"issue": "#201"
217+
},
218+
"term2/verse/continuation/term3": {
219+
"fails": ["fidelity"],
220+
"issue": "#201"
221+
},
222+
"term2/verse/continuation/text": {
223+
"fails": ["fidelity"],
224+
"issue": "#201"
225+
},
226+
"term3/listing/continuation/marker": {
227+
"fails": ["fidelity"],
228+
"issue": "#201"
229+
},
230+
"term3/listing/continuation/ordered": {
231+
"fails": ["fidelity"],
232+
"issue": "#201"
233+
},
234+
"term3/listing/continuation/text": {
235+
"fails": ["fidelity"],
236+
"issue": "#201"
237+
},
238+
"term3/literal/continuation/marker": {
239+
"fails": ["fidelity"],
240+
"issue": "#201"
241+
},
242+
"term3/literal/continuation/ordered": {
243+
"fails": ["fidelity"],
244+
"issue": "#201"
245+
},
246+
"term3/literal/continuation/text": {
247+
"fails": ["fidelity"],
248+
"issue": "#201"
249+
},
250+
"term3/source/continuation/marker": {
251+
"fails": ["fidelity"],
252+
"issue": "#201"
253+
},
254+
"term3/source/continuation/ordered": {
255+
"fails": ["fidelity"],
256+
"issue": "#201"
257+
},
258+
"term3/source/continuation/text": {
259+
"fails": ["fidelity"],
260+
"issue": "#201"
261+
},
262+
"term3/verse/continuation/marker": {
263+
"fails": ["fidelity"],
264+
"issue": "#201"
265+
},
266+
"term3/verse/continuation/ordered": {
267+
"fails": ["fidelity"],
268+
"issue": "#201"
269+
},
270+
"term3/verse/continuation/text": {
271+
"fails": ["fidelity"],
272+
"issue": "#201"
273+
}
274+
}

0 commit comments

Comments
 (0)