Skip to content

Commit 739ab93

Browse files
committed
feat(xtask): link each edition from the docs landing page
Give every edition its own anchored section in the generated registry of docs/specs/editions.md (status, minimum reader, encodings added, full encoding set), link the editions and encoding-index tables to those sections, and splice a generated per-family list of edition links into a new Editions section on docs/index.md. Both files are regenerated by `cargo xtask generate-editions-docs` and covered by the generated-files CI check. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XKRaAHmFNvb7JoKTJVW8Pw Signed-off-by: Claude <noreply@anthropic.com>
1 parent c831533 commit 739ab93

4 files changed

Lines changed: 246 additions & 76 deletions

File tree

docs/index.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,18 @@ internals. Build and benchmark locally.
9191
- **Language bindings**: First-class support for Python (PyO3), Java (JNI + Spark/Trino connectors),
9292
and C/C++ (FFI).
9393

94+
## Editions
95+
96+
Vortex writers target **[editions](specs/editions.md)** — named, frozen sets of encodings that
97+
carry a forever read-compatibility guarantee:
98+
99+
<!-- BEGIN generated edition links: edit the declarations in `vortex/src/editions/` and run `cargo xtask generate-editions-docs` -->
100+
101+
- **core**: [`core2025.05.0`](specs/editions.md#core2025050) · [`core2025.06.0`](specs/editions.md#core2025060) · [`core2025.10.0`](specs/editions.md#core2025100) · [`core2026.07.0`](specs/editions.md#core2026070)
102+
- **unstable**: [`unstable2025.05.0`](specs/editions.md#unstable2025050) · [`unstable2026.02.0`](specs/editions.md#unstable2026020) · [`unstable2026.04.0`](specs/editions.md#unstable2026040) · [`unstable2026.06.0`](specs/editions.md#unstable2026060)
103+
104+
<!-- END generated edition links -->
105+
94106
```{toctree}
95107
---
96108
hidden:

docs/specs/editions.md

Lines changed: 108 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,14 @@ indefinitely, so deprecation never invalidates existing files.
6565

6666
| Edition | Status | Minimum Vortex reader | Encodings |
6767
| --- | --- | --- | --- |
68-
| `core2025.05.0` | frozen | 0.36.0 | 23 |
69-
| `core2025.06.0` | frozen | 0.40.0 | 26 |
70-
| `core2025.10.0` | frozen | 0.54.0 | 30 |
71-
| `core2026.07.0` | frozen | 0.65.0 | 31 |
72-
| `unstable2025.05.0` | draft || 1 |
73-
| `unstable2026.02.0` | draft || 2 |
74-
| `unstable2026.04.0` | draft || 8 |
75-
| `unstable2026.06.0` | draft || 9 |
68+
| [`core2025.05.0`](#core2025050) | frozen | 0.36.0 | 23 |
69+
| [`core2025.06.0`](#core2025060) | frozen | 0.40.0 | 26 |
70+
| [`core2025.10.0`](#core2025100) | frozen | 0.54.0 | 30 |
71+
| [`core2026.07.0`](#core2026070) | frozen | 0.65.0 | 31 |
72+
| [`unstable2025.05.0`](#unstable2025050) | draft || 1 |
73+
| [`unstable2026.02.0`](#unstable2026020) | draft || 2 |
74+
| [`unstable2026.04.0`](#unstable2026040) | draft || 8 |
75+
| [`unstable2026.06.0`](#unstable2026060) | draft || 9 |
7676

7777
A draft edition is still being assembled: its encoding set may change and it carries no compatibility guarantee until it is frozen.
7878

@@ -82,45 +82,105 @@ Each encoding lists the edition it first joined; it is a member of every later e
8282

8383
| Encoding | Since edition | Minimum Vortex reader |
8484
| --- | --- | --- |
85-
| `fastlanes.bitpacked` | `core2025.05.0` | 0.36.0 |
86-
| `fastlanes.delta` | `unstable2025.05.0` ||
87-
| `fastlanes.for` | `core2025.05.0` | 0.36.0 |
88-
| `fastlanes.rle` | `core2025.10.0` | 0.54.0 |
89-
| `vortex.alp` | `core2025.05.0` | 0.36.0 |
90-
| `vortex.alprd` | `core2025.05.0` | 0.36.0 |
91-
| `vortex.bool` | `core2025.05.0` | 0.36.0 |
92-
| `vortex.bytebool` | `core2025.05.0` | 0.36.0 |
93-
| `vortex.chunked` | `core2025.05.0` | 0.36.0 |
94-
| `vortex.constant` | `core2025.05.0` | 0.36.0 |
95-
| `vortex.datetimeparts` | `core2025.05.0` | 0.36.0 |
96-
| `vortex.decimal` | `core2025.05.0` | 0.36.0 |
97-
| `vortex.decimal_byte_parts` | `core2025.05.0` | 0.36.0 |
98-
| `vortex.dict` | `core2025.05.0` | 0.36.0 |
99-
| `vortex.ext` | `core2025.05.0` | 0.36.0 |
100-
| `vortex.fixed_size_list` | `core2025.10.0` | 0.54.0 |
101-
| `vortex.fsst` | `core2025.05.0` | 0.36.0 |
102-
| `vortex.list` | `core2025.05.0` | 0.36.0 |
103-
| `vortex.listview` | `core2025.10.0` | 0.54.0 |
104-
| `vortex.masked` | `core2025.10.0` | 0.54.0 |
105-
| `vortex.null` | `core2025.05.0` | 0.36.0 |
106-
| `vortex.onpair` | `unstable2026.06.0` ||
107-
| `vortex.parquet.variant` | `unstable2026.04.0` ||
108-
| `vortex.patched` | `unstable2026.04.0` ||
109-
| `vortex.pco` | `core2025.06.0` | 0.40.0 |
110-
| `vortex.primitive` | `core2025.05.0` | 0.36.0 |
111-
| `vortex.runend` | `core2025.05.0` | 0.36.0 |
112-
| `vortex.sequence` | `core2025.06.0` | 0.40.0 |
113-
| `vortex.sparse` | `core2025.05.0` | 0.36.0 |
114-
| `vortex.struct` | `core2025.05.0` | 0.36.0 |
115-
| `vortex.tensor.cosine_similarity` | `unstable2026.04.0` ||
116-
| `vortex.tensor.inner_product` | `unstable2026.04.0` ||
117-
| `vortex.tensor.l2_denorm` | `unstable2026.04.0` ||
118-
| `vortex.tensor.l2_norm` | `unstable2026.04.0` ||
119-
| `vortex.varbin` | `core2025.05.0` | 0.36.0 |
120-
| `vortex.varbinview` | `core2025.05.0` | 0.36.0 |
121-
| `vortex.variant` | `core2026.07.0` | 0.65.0 |
122-
| `vortex.zigzag` | `core2025.05.0` | 0.36.0 |
123-
| `vortex.zstd` | `core2025.06.0` | 0.40.0 |
124-
| `vortex.zstd_buffers` | `unstable2026.02.0` ||
85+
| `fastlanes.bitpacked` | [`core2025.05.0`](#core2025050) | 0.36.0 |
86+
| `fastlanes.delta` | [`unstable2025.05.0`](#unstable2025050) ||
87+
| `fastlanes.for` | [`core2025.05.0`](#core2025050) | 0.36.0 |
88+
| `fastlanes.rle` | [`core2025.10.0`](#core2025100) | 0.54.0 |
89+
| `vortex.alp` | [`core2025.05.0`](#core2025050) | 0.36.0 |
90+
| `vortex.alprd` | [`core2025.05.0`](#core2025050) | 0.36.0 |
91+
| `vortex.bool` | [`core2025.05.0`](#core2025050) | 0.36.0 |
92+
| `vortex.bytebool` | [`core2025.05.0`](#core2025050) | 0.36.0 |
93+
| `vortex.chunked` | [`core2025.05.0`](#core2025050) | 0.36.0 |
94+
| `vortex.constant` | [`core2025.05.0`](#core2025050) | 0.36.0 |
95+
| `vortex.datetimeparts` | [`core2025.05.0`](#core2025050) | 0.36.0 |
96+
| `vortex.decimal` | [`core2025.05.0`](#core2025050) | 0.36.0 |
97+
| `vortex.decimal_byte_parts` | [`core2025.05.0`](#core2025050) | 0.36.0 |
98+
| `vortex.dict` | [`core2025.05.0`](#core2025050) | 0.36.0 |
99+
| `vortex.ext` | [`core2025.05.0`](#core2025050) | 0.36.0 |
100+
| `vortex.fixed_size_list` | [`core2025.10.0`](#core2025100) | 0.54.0 |
101+
| `vortex.fsst` | [`core2025.05.0`](#core2025050) | 0.36.0 |
102+
| `vortex.list` | [`core2025.05.0`](#core2025050) | 0.36.0 |
103+
| `vortex.listview` | [`core2025.10.0`](#core2025100) | 0.54.0 |
104+
| `vortex.masked` | [`core2025.10.0`](#core2025100) | 0.54.0 |
105+
| `vortex.null` | [`core2025.05.0`](#core2025050) | 0.36.0 |
106+
| `vortex.onpair` | [`unstable2026.06.0`](#unstable2026060) ||
107+
| `vortex.parquet.variant` | [`unstable2026.04.0`](#unstable2026040) ||
108+
| `vortex.patched` | [`unstable2026.04.0`](#unstable2026040) ||
109+
| `vortex.pco` | [`core2025.06.0`](#core2025060) | 0.40.0 |
110+
| `vortex.primitive` | [`core2025.05.0`](#core2025050) | 0.36.0 |
111+
| `vortex.runend` | [`core2025.05.0`](#core2025050) | 0.36.0 |
112+
| `vortex.sequence` | [`core2025.06.0`](#core2025060) | 0.40.0 |
113+
| `vortex.sparse` | [`core2025.05.0`](#core2025050) | 0.36.0 |
114+
| `vortex.struct` | [`core2025.05.0`](#core2025050) | 0.36.0 |
115+
| `vortex.tensor.cosine_similarity` | [`unstable2026.04.0`](#unstable2026040) ||
116+
| `vortex.tensor.inner_product` | [`unstable2026.04.0`](#unstable2026040) ||
117+
| `vortex.tensor.l2_denorm` | [`unstable2026.04.0`](#unstable2026040) ||
118+
| `vortex.tensor.l2_norm` | [`unstable2026.04.0`](#unstable2026040) ||
119+
| `vortex.varbin` | [`core2025.05.0`](#core2025050) | 0.36.0 |
120+
| `vortex.varbinview` | [`core2025.05.0`](#core2025050) | 0.36.0 |
121+
| `vortex.variant` | [`core2026.07.0`](#core2026070) | 0.65.0 |
122+
| `vortex.zigzag` | [`core2025.05.0`](#core2025050) | 0.36.0 |
123+
| `vortex.zstd` | [`core2025.06.0`](#core2025060) | 0.40.0 |
124+
| `vortex.zstd_buffers` | [`unstable2026.02.0`](#unstable2026020) ||
125+
126+
### core2025.05.0
127+
128+
Frozen — readable by Vortex 0.36.0 and newer. 23 encodings.
129+
130+
Adds: `fastlanes.bitpacked`, `fastlanes.for`, `vortex.alp`, `vortex.alprd`, `vortex.bool`, `vortex.bytebool`, `vortex.chunked`, `vortex.constant`, `vortex.datetimeparts`, `vortex.decimal`, `vortex.decimal_byte_parts`, `vortex.dict`, `vortex.ext`, `vortex.fsst`, `vortex.list`, `vortex.null`, `vortex.primitive`, `vortex.runend`, `vortex.sparse`, `vortex.struct`, `vortex.varbin`, `vortex.varbinview`, `vortex.zigzag`
131+
132+
### core2025.06.0
133+
134+
Frozen — readable by Vortex 0.40.0 and newer. 26 encodings.
135+
136+
Adds: `vortex.pco`, `vortex.sequence`, `vortex.zstd`
137+
138+
Full encoding set: `fastlanes.bitpacked`, `fastlanes.for`, `vortex.alp`, `vortex.alprd`, `vortex.bool`, `vortex.bytebool`, `vortex.chunked`, `vortex.constant`, `vortex.datetimeparts`, `vortex.decimal`, `vortex.decimal_byte_parts`, `vortex.dict`, `vortex.ext`, `vortex.fsst`, `vortex.list`, `vortex.null`, `vortex.pco`, `vortex.primitive`, `vortex.runend`, `vortex.sequence`, `vortex.sparse`, `vortex.struct`, `vortex.varbin`, `vortex.varbinview`, `vortex.zigzag`, `vortex.zstd`
139+
140+
### core2025.10.0
141+
142+
Frozen — readable by Vortex 0.54.0 and newer. 30 encodings.
143+
144+
Adds: `fastlanes.rle`, `vortex.fixed_size_list`, `vortex.listview`, `vortex.masked`
145+
146+
Full encoding set: `fastlanes.bitpacked`, `fastlanes.for`, `fastlanes.rle`, `vortex.alp`, `vortex.alprd`, `vortex.bool`, `vortex.bytebool`, `vortex.chunked`, `vortex.constant`, `vortex.datetimeparts`, `vortex.decimal`, `vortex.decimal_byte_parts`, `vortex.dict`, `vortex.ext`, `vortex.fixed_size_list`, `vortex.fsst`, `vortex.list`, `vortex.listview`, `vortex.masked`, `vortex.null`, `vortex.pco`, `vortex.primitive`, `vortex.runend`, `vortex.sequence`, `vortex.sparse`, `vortex.struct`, `vortex.varbin`, `vortex.varbinview`, `vortex.zigzag`, `vortex.zstd`
147+
148+
### core2026.07.0
149+
150+
Frozen — readable by Vortex 0.65.0 and newer. 31 encodings.
151+
152+
Adds: `vortex.variant`
153+
154+
Full encoding set: `fastlanes.bitpacked`, `fastlanes.for`, `fastlanes.rle`, `vortex.alp`, `vortex.alprd`, `vortex.bool`, `vortex.bytebool`, `vortex.chunked`, `vortex.constant`, `vortex.datetimeparts`, `vortex.decimal`, `vortex.decimal_byte_parts`, `vortex.dict`, `vortex.ext`, `vortex.fixed_size_list`, `vortex.fsst`, `vortex.list`, `vortex.listview`, `vortex.masked`, `vortex.null`, `vortex.pco`, `vortex.primitive`, `vortex.runend`, `vortex.sequence`, `vortex.sparse`, `vortex.struct`, `vortex.varbin`, `vortex.varbinview`, `vortex.variant`, `vortex.zigzag`, `vortex.zstd`
155+
156+
### unstable2025.05.0
157+
158+
Draft — being assembled, no compatibility guarantee yet. 1 encoding.
159+
160+
Adds: `fastlanes.delta`
161+
162+
### unstable2026.02.0
163+
164+
Draft — being assembled, no compatibility guarantee yet. 2 encodings.
165+
166+
Adds: `vortex.zstd_buffers`
167+
168+
Full encoding set: `fastlanes.delta`, `vortex.zstd_buffers`
169+
170+
### unstable2026.04.0
171+
172+
Draft — being assembled, no compatibility guarantee yet. 8 encodings.
173+
174+
Adds: `vortex.parquet.variant`, `vortex.patched`, `vortex.tensor.cosine_similarity`, `vortex.tensor.inner_product`, `vortex.tensor.l2_denorm`, `vortex.tensor.l2_norm`
175+
176+
Full encoding set: `fastlanes.delta`, `vortex.parquet.variant`, `vortex.patched`, `vortex.tensor.cosine_similarity`, `vortex.tensor.inner_product`, `vortex.tensor.l2_denorm`, `vortex.tensor.l2_norm`, `vortex.zstd_buffers`
177+
178+
### unstable2026.06.0
179+
180+
Draft — being assembled, no compatibility guarantee yet. 9 encodings.
181+
182+
Adds: `vortex.onpair`
183+
184+
Full encoding set: `fastlanes.delta`, `vortex.onpair`, `vortex.parquet.variant`, `vortex.patched`, `vortex.tensor.cosine_similarity`, `vortex.tensor.inner_product`, `vortex.tensor.l2_denorm`, `vortex.tensor.l2_norm`, `vortex.zstd_buffers`
125185

126186
<!-- END generated edition registry -->

xtask/README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ be run every time changes are made to one of the .fbs files, or if any are added
2121

2222
### `generate-editions-docs`
2323

24-
This regenerates the edition registry section of `docs/specs/editions.md` from the edition
25-
declarations in `vortex/src/editions/`. It first dumps the declarations as a TOML manifest
24+
This regenerates the edition registry section of `docs/specs/editions.md` (including a
25+
linkable section per edition) and the per-edition links on the docs landing page
26+
(`docs/index.md`) from the edition declarations in `vortex/src/editions/`. It first dumps
27+
the declarations as a TOML manifest
2628
to `target/editions-manifest.toml` (a build artifact, never committed) by running the
2729
`editions_manifest` example of the `vortex` crate, then renders that manifest into the
2830
markdown between the `BEGIN`/`END generated edition registry` markers. Run it every time

0 commit comments

Comments
 (0)