@qxuken/kui 0.1.0-alpha.46 → 0.1.0-alpha.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +57 -0
- package/docs/adr/0043-a-node-turns-about-its-pivot.md +14 -8
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/kui_node.node +0 -0
- package/prebuilds/linux-arm64/kui_node.node +0 -0
- package/prebuilds/linux-x64/kui_node.node +0 -0
- package/prebuilds/win32-x64/kui_node.node +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -21,6 +21,51 @@ listed under both (backlog F61, from the alpha.12 field reports: the list
|
|
|
21
21
|
is what the release knows it broke, and a fix it did not think of as one
|
|
22
22
|
was the first bare bump to break an app in five releases).
|
|
23
23
|
|
|
24
|
+
## 0.1.0-alpha.47 (2026-10-09)
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
|
|
28
|
+
- **Text inside a turned node is read where it is drawn** (backlog
|
|
29
|
+
RG155, ADR 0043). A press on an editor in a tilted or scaled card puts
|
|
30
|
+
the caret under the pointer, and so does the drag that extends it, a
|
|
31
|
+
selection drag over a paragraph or a grid, a double or triple click,
|
|
32
|
+
`text_hit`, and the `line` / `byte` / `cell` a sink's pointer events
|
|
33
|
+
carry; `caret_rect` and the IME's anchor are where the caret is drawn,
|
|
34
|
+
so the candidate window opens beside a tilted field. alpha.46 read all
|
|
35
|
+
of them against the upright node. A square clipper inside a turn now
|
|
36
|
+
smooths its edge as a rounded one does instead of stairing, in the
|
|
37
|
+
renderer and the fragment epilogue.
|
|
38
|
+
|
|
39
|
+
### Native verification
|
|
40
|
+
|
|
41
|
+
The by-hand round on 2026-10-09, over RG155 — what alpha.46's pre-tag
|
|
42
|
+
pass left — on the Mac: the mechanical round as CI runs it, the Odin
|
|
43
|
+
binding regenerated and type-checked with CI's pinned Odin in a Debian
|
|
44
|
+
container (the lesson of alpha.46's tag), the windowed round, the
|
|
45
|
+
accessibility audit and the bench guard, then one read-only reviewer of
|
|
46
|
+
the diff since alpha.46, each claim probed. It found two of RG155's
|
|
47
|
+
paths written the wrong way — `text_hit` and `caret_rect` turned in the
|
|
48
|
+
host's space where the turns are the window's, which a devtools dock on
|
|
49
|
+
the left made twice its width wrong, and a sink's `line` and `byte` read
|
|
50
|
+
through the sink's turn alone, not a turned column inside it — and a
|
|
51
|
+
lookup every frame with a clip paid; all three were corrected before the
|
|
52
|
+
tag, with tests that fail without them.
|
|
53
|
+
|
|
54
|
+
**macOS**, the pre-tag pass. fmt and clippy are clean; `nu
|
|
55
|
+
scripts/test.nu`: **2003 tests over 150 suites**, 0 failed. The C round
|
|
56
|
+
passes (5 checks), and so do the **58 scenes** through Rust, Lua, C and
|
|
57
|
+
Node; Node's tests under `KUI_CONFORMANCE_REQUIRED=1`, **224 of 224**;
|
|
58
|
+
`npm run gen` with no diff, the examples' typecheck, the headless
|
|
59
|
+
round, the book. The Odin generator's output matches the tree byte for
|
|
60
|
+
byte, and the package and its five examples pass `odin check -vet
|
|
61
|
+
-strict-style`. The windowed round with Node's: **55 examples on both
|
|
62
|
+
bases**, clean on a first run. The accessibility audit: **106 of 106**.
|
|
63
|
+
The bench guard against the alpha.46 tag: **green**, the eight guarded
|
|
64
|
+
rows −0.7% to +3.5% on a machine another session had just been
|
|
65
|
+
building on, and the two high rows re-read at +0.2%
|
|
66
|
+
(`frame_10k_rects`) and +1.1% (`list_10k_rows_virtual`) once it was
|
|
67
|
+
quiet. No Windows or Linux machine ran this round.
|
|
68
|
+
|
|
24
69
|
## 0.1.0-alpha.46 (2026-10-09)
|
|
25
70
|
|
|
26
71
|
**What breaks.**
|
|
@@ -204,6 +249,18 @@ layer this round needed is checked by CI's `odin.nu` steps on the tag,
|
|
|
204
249
|
and its layout was compared by script against the C side's asserts. No
|
|
205
250
|
Windows or Linux machine ran this round.
|
|
206
251
|
|
|
252
|
+
Those steps failed on the tag: `odin.nu gen --check` found the
|
|
253
|
+
hand-written `generated.odin` with the `now` door one place out of the
|
|
254
|
+
generator's order, so Forgejo's `check` failed and its publish to the
|
|
255
|
+
drydock9 cargo registry was skipped. GitHub's pipeline had already put
|
|
256
|
+
the crates on crates.io and staged the npm package, from the same
|
|
257
|
+
commit, so the tag stays where it is. Nothing shipped differs: the Odin
|
|
258
|
+
package is in neither registry. The file was regenerated with CI's
|
|
259
|
+
pinned Odin (`dev-2026-09`) in a Debian container, the package and every
|
|
260
|
+
Odin example type-checked there, and the fix is on main after the tag.
|
|
261
|
+
alpha.46 was left off the drydock9 registry; alpha.47 is the next
|
|
262
|
+
release there.
|
|
263
|
+
|
|
207
264
|
## 0.1.0-alpha.45 (2026-10-08)
|
|
208
265
|
|
|
209
266
|
**What breaks.**
|
|
@@ -241,7 +241,10 @@ date: 2026-10-08
|
|
|
241
241
|
did (the guard allows the noise floor).
|
|
242
242
|
- A frame of 1,000 turned boxes, each its own clip entry, against the
|
|
243
243
|
same frame upright: the cost of the per-node compose and the
|
|
244
|
-
bounding-box cull.
|
|
244
|
+
bounding-box cull. Taken 2026-10-09 (RG155): `frame_1k_turned_rects`
|
|
245
|
+
reads ~136 µs against `frame_1k_rects`' ~79 µs, about 56 ns a turned
|
|
246
|
+
node — its own interned entry (a turn about its own box makes every
|
|
247
|
+
entry distinct), the compose, the bounding-box cull.
|
|
245
248
|
|
|
246
249
|
## Amendment: what the building changed (2026-10-08)
|
|
247
250
|
|
|
@@ -268,13 +271,16 @@ date: 2026-10-08
|
|
|
268
271
|
turned (its quads name the scroller's entry) but its track is tested
|
|
269
272
|
as an upright rect. A turned scroller is a demonstration shape, and
|
|
270
273
|
the wheel over it is right; the thumb waits for an app that drags one.
|
|
271
|
-
- **
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
274
|
+
- **What a press means for text is read on the upright layout.** The
|
|
275
|
+
caret a press places, the drag that extends it, a selection drag, a
|
|
276
|
+
grid's cell, `text_hit` and a sink's `line` / `byte` pull the pointer
|
|
277
|
+
back through the node's turn first (`Core::unturned`), and
|
|
278
|
+
`caret_rect` and the IME anchor are the caret as drawn. Alpha.46's
|
|
279
|
+
pre-tag pass found them reading the pointer upright; built the day
|
|
280
|
+
after the tag (RG155), with the square inner clip ramped over `AA` as
|
|
281
|
+
a rounded one is. A sink's lines are each read through their own
|
|
282
|
+
turns; a turn nested inside a selectable scope is read against the
|
|
283
|
+
scope's turn.
|
|
278
284
|
- **The Odin layer was regenerated by hand.** No Odin ran on the
|
|
279
285
|
building machine (its binary wants an LLVM the machine does not have),
|
|
280
286
|
so `kui_c.odin`, `layout.odin`, `generated.odin`, `types.odin` and the
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|