Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,35 @@ project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

### Fixed

- The Racket reference engine now answers the two coordinates inside a warichu block that
the other two engines already agreed on, which closes
[#23](https://github.com/P4suta/jlreq/issues/23) and
[#24](https://github.com/P4suta/jlreq/issues/24). `engines/racket/compose.rkt` reported a
line's `block_extent` as the sum of the note's own subline heights where that was larger
than the paragraph's own block size, so a note set at the paragraph's em rather than at
§3.4.2's half one made the line twice as deep as the paragraph set it; and it reported a
member's advance as its bare body, so a member standing before a Table 1 amount inside
its own subline — `cl-02` then `cl-01`, half of the note's own em — reported 500 where the
same engine placed the next member 750 units on. Both are one reading:
`docs/decisions/stacked-structure-geometry.md` now states what a block does on the block
axis (its sublines run *beside* the line, so their depth is not a depth the line reports)
and what Table 1 does inside one (a note's text is ordinary text, so the boundary between
two characters of one subline carries the ordinary amount, and a member's advance is the
step that reaches the member after it). The same reading closes §3.8.3's half of it: a
boundary the line was not composed from is not one the line may take space back from, so
the reduction ladder no longer reaches inside a block — the expansion ladder already did
not. No public API and no other engine changed. `engines/ocaml/probe/census.ml` reaches
both shapes at every class pair now: five further `constructs` variants
(`warichu-full-size` and its vertical mirror, `warichu-pair-inside`,
`warichu-pair-inside-row` and `warichu-pair-inside-justified`) and two further `tabs`
variants (a sign inside a note set at the paragraph's own em, at a stop the line reaches
and at one it has passed) — so the `constructs` census is 18,515 requests, `tabs` is
31,211, and all ten censuses are at zero differences across the three engines over
120,612. A sixth `constructs` variant is deliberately absent: a line that has to *give
space back* beside a note whose two sublines meet at a Table 1 amount is a coordinate the
Rust and OCaml engines do not yet agree on themselves — the Rust engine divides the
line's arrears over that in-block boundary and lays nothing down there, the OCaml engine
does not offer it at all — and a census asks the settled question.
- The Racket reference engine now reads §3.6.3's tab round the way
`docs/decisions/tab-line-correspondence.md` publishes it, which closes
[#19](https://github.com/P4suta/jlreq/issues/19) and lifts the census exclusion the entry
Expand Down
2 changes: 1 addition & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ conformance protocol, gated on a milestone sequence of its own
advanced toward the built-in suite one disjoint milestone per pull request and now claims
milestone 9, the last one: all eighty-nine cases answer bit for bit, so `just ocaml-gate`
and `just conform-ocaml` are the same run and the required CI job holds the engine to the
whole suite. Ten synthetic censuses agree with the Rust engine across 116,909 further
whole suite. Ten synthetic censuses agree with the Rust engine across 120,612 further
requests, and the twenty-six observable policies the exercise turned up — rules two engines
must share to pass the same case, stated in no sentence of JLReq and no file under `docs/` —
are listed in `engines/ocaml/README.md` and are candidates for `docs/decisions/`.
Expand Down
2 changes: 1 addition & 1 deletion data/manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

[[file]]
path = "ROADMAP.md"
sha256 = "e47ffe6ac5c189fa125b463981404643086f40bced7d6713fc85cc773bad3b5e"
sha256 = "d804757056cc7509c09721c86427db5405febca50853971416a14c63035dc47d"

[[file]]
path = "crates/jlreq-conformance/protocol.schema.json"
Expand Down
2 changes: 1 addition & 1 deletion docs/decisions/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ reaches it, where any does — so that a reader can reproduce the observation ra
the claim.

A *third* engine ([engines/racket/](../../engines/racket/README.md)) has since been brought
to zero differences against both of the others on all ten censuses, 116,909 requests, and
to zero differences against both of the others on all ten censuses, 120,612 requests, and
that convergence turned up nine more policies of the same kind. Two of them are subjects
nothing here covered and have files of their own in the table below; the other seven belong
to subjects already published and were written into those files, one of them into a reading
Expand Down
2 changes: 1 addition & 1 deletion docs/decisions/jidori-room-and-solid-boundaries.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ SPDX-License-Identifier: MIT OR Apache-2.0
[`engines/racket/structure.rkt`](../../engines/racket/structure.rkt)
- Standing: `Unstated`
- JLReq: §3.7.3, §B.1, §C.3, §3.8.3
- Observed by: `just census tabs` (30,153 requests) and `just census constructs` (15,870
- Observed by: `just census tabs` (31,211 requests) and `just census constructs` (18,515
requests), the jidori variants; no built-in case reaches a jidori with no open boundary

## The silence
Expand Down
2 changes: 1 addition & 1 deletion docs/decisions/ornamented-complex-geometry.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ SPDX-License-Identifier: MIT OR Apache-2.0
[`engines/ocaml/lib/pipeline.ml`](../../engines/ocaml/lib/pipeline.ml)
- Standing: `Unstated`
- JLReq: §3.3.9, §3.7.1, §B.2#9, §C.2#6, §E.2#5
- Observed by: `just census constructs` (15,870 requests), the emphasis and script variants
- Observed by: `just census constructs` (18,515 requests), the emphasis and script variants

## The silence

Expand Down
2 changes: 1 addition & 1 deletion docs/decisions/ruby-overhang-permission.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ is the one under which the sentence is about something.

**Nothing before M6 could see this.** cl-09 and cl-10 are the same row and the same column in
all six matrices, at every coordinate except those four ruby cells. An engine could carry
either reading through 116,909 census requests and every one of the eighty-nine conformance
either reading through 120,612 census requests and every one of the eighty-nine conformance
cases without the difference surfacing anywhere but here. That is the reason to publish it
rather than leave it in a comment: it is invisible until it is not, and the next independent
engine has no way to derive it.
Expand Down
49 changes: 47 additions & 2 deletions docs/decisions/stacked-structure-geometry.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ SPDX-License-Identifier: MIT OR Apache-2.0
[`engines/ocaml/lib/pipeline.ml`](../../engines/ocaml/lib/pipeline.ml)
- Standing: `Unstated`
- JLReq: §3.4.2, §3.4.3, §3.7.2, §B.2#13, §C.3
- Observed by: `just census constructs` (15,870 requests), the warichu and furawake
- Observed by: `just census constructs` (18,515 requests), the warichu and furawake
variants; the last two readings below by the third engine's convergence on the same
census
census, and the two block-axis and in-block readings by its `warichu-full-size` and
`warichu-pair-inside` variants

## The silence

Expand Down Expand Up @@ -84,6 +85,21 @@ stands before the whole block and is no part of the bracket's reported advance,
amount stated in the *neighbor's* em is the neighbor's and stands where the neighbor puts
it. A structure has two edges and they are the same edge twice.

**The block a structure makes is not a depth the line reports.** A warichu's sublines run
*beside* the line, so however deep they come to, the line's own block extent is the one the
paragraph set — a note whose members are set at the paragraph's own em rather than at the
half em §3.4.2's own sizing comes to makes a block two ems deep and leaves the line one em
deep. The sublines' own extents are the block's business and the line reports its own.

**A character *inside* the block is spaced like any other, and its advance is the step that
reaches the next one.** §3.4.2's note is ordinary text of the note, so the boundary between
two characters of one subline carries Table 1's ordinary amount, and the advance the
character before it reports is its own body plus that amount — exactly what it would report
standing beside the line. The character that *ends* a subline reports its body alone,
because nothing of that subline stands after it. Neither ladder reaches such a boundary:
§3.8.3 and §3.8.4 adjust the spacing of the line, and space inside a block was never the
line's to give back or to open.

**§3.4.3's balance is a demerit in the paragraph's own objective, ranked below an overrun
and above a short line.** A break inside a warichu carries a cost proportional to how
unevenly it divides the note — one 1,000,000-unit demerit per cluster of imbalance, in the
Expand Down Expand Up @@ -134,6 +150,28 @@ taken from — the same distinction [ruby-overhang-permission](ruby-overhang-per
draws for a Table 1 `hang` term — and it is drawn once for the structure rather than twice
for its brackets.

**The block axis is the same sentence read across the line instead of along it.** "One
position" is a statement about how much of the line a structure is, and a line has two
extents. If the sublines' own heights summed into the line's, a caller could make a line
taller by writing a longer note into it — and §3.4.2's own subject is a note set *inside* a
line rather than one that pushes the lines apart. The sublines are not lines of their own,
so what they cover is not a height the line has to make room for, exactly as their combined
width is not a width the line advances by. It is the same argument that keeps the closing
bracket's trailing space off the bracket, applied to the axis the section never spells out
separately.

**Inside the block, there is no structure to be at the edge of.** The two readings above
withdraw a space because the character stands where the *line* stops and the block begins;
between two characters of one subline there is no such edge, and the note is text being set.
Table 1 is what sets text, so it answers there like anywhere else, and an engine that
withheld it would be composing the note by a rule the specification states for nothing. The
advance follows from the same place the line's own advances do: the number an implementation
reports as a character's advance is the number that reaches the character after it, and an
answer whose advances did not add up to its own positions would be two geometries at once —
the defect [#24](https://github.com/P4suta/jlreq/issues/24) records. The ladders are the
other half of it: a boundary the line was not composed from is not a boundary the line can
adjust, which is why the two of them read the *line's* geometry and stop at the block.

**A figure is an example, and an example cannot outrank the measure.** §3.4.3 shows what a
straddling note looks like when it comes out well. Reading its balance as a *requirement*
would put a rule about a note's own two lines above the rule that a line of base text fits
Expand Down Expand Up @@ -166,6 +204,13 @@ where it belongs, because it is a fact about how the matrix is addressed rather
what a warichu is. That same legend settles the fourth reading in the same stroke: the two
edges are one question and a note about either of them answers both.

A sentence in §3.4.2 stating how deep a line carrying a note is, or an Appendix B legend
that says whether the matrix is asked between two characters of one subline, settles the two
readings above in the same stroke: both are questions about which object a rule is addressed
to, and both were reached by measurement before anything was written down here
([#23](https://github.com/P4suta/jlreq/issues/23),
[#24](https://github.com/P4suta/jlreq/issues/24)).

For the fifth, a sentence in §3.4.3 that states what its figures show as a rule — how much
of a note goes on the first base-text line, and what yields to what when a division that
balances the note costs the line something — settles it. Any weighting is publishable, and
Expand Down
4 changes: 2 additions & 2 deletions docs/decisions/tab-line-correspondence.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ SPDX-License-Identifier: MIT OR Apache-2.0
[`engines/racket/compose.rkt`](../../engines/racket/compose.rkt)
- Standing: `Unstated`
- JLReq: §3.6.1, §3.6.2, §3.6.3, §3.1 (silence), ADR-0018
- Observed by: `just census tabs` (30,153 requests), and by probing the reference engine
- Observed by: `just census tabs` (31,211 requests), and by probing the reference engine
with stops the eighty-nine built-in cases never state; the reading about which constructs
hold a coordinate a stop can name by the third engine's convergence on the same census.
The two coordinates this file once excluded — a sign that opens a tate-chu-yoko run
Expand Down Expand Up @@ -215,7 +215,7 @@ tate-chu-yoko run; a sign inside a warichu and inside a furawake; a sign that op
those; and a sign of the line standing *after* such a structure, whose own stop has to be
measured from a walk in which the whole block is one step. Every one of them at both a stop
the line has gone past and one it has not, and all three reference engines answer all of them
alike at every class pair (30,153 requests, no difference). The last four shapes went in when
alike at every class pair (31,211 requests, no difference). The last four shapes went in when
the Racket engine reached the reading published here
([#19](https://github.com/P4suta/jlreq/issues/19)); until then they were deliberately left
out, because a census is a gate and a gate that is red is not one.
Expand Down
2 changes: 1 addition & 1 deletion docs/decisions/tate-chu-yoko-spacing-sources.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ SPDX-License-Identifier: MIT OR Apache-2.0
sentence reaches at all.
- JLReq: §3.2.5, §3.6, §B.1, §B.2, §3.8.3, §3.8.4
- Observed by: `just census tate-chu-yoko` (4,761 requests) for the cl-30 coordinates, and
`just census tabs` (30,153 requests) for the cell after a tab sign
`just census tabs` (31,211 requests) for the cell after a tab sign

## The silence

Expand Down
2 changes: 1 addition & 1 deletion docs/decisions/warichu-bracket-listing.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ SPDX-License-Identifier: MIT OR Apache-2.0
[`engines/racket/classes.rkt`](../../engines/racket/classes.rkt)
- Standing: `Unstated`
- JLReq: §3.9.2, §3.4.2, §A.01, §A.02, §A.28, §A.29
- Observed by: `just census constructs` (15,870 requests), the warichu variants
- Observed by: `just census constructs` (18,515 requests), the warichu variants

## The silence

Expand Down
Loading
Loading