pi-cursor-inference 0.0.1 → 0.0.2
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 +6 -0
- package/README.md +3 -2
- package/docs/brand.md +94 -1
- package/docs/gallery.png +0 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# pi-cursor-inference
|
|
2
2
|
|
|
3
|
+
## 0.0.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Correct the pi.dev gallery preview with a native 4K 16:9 composition and make the README's implementation links resolve from npm and pi.dev ([`3f525e6`](https://github.com/victor-software-house/pi-cursor/commit/3f525e6393f3eff23f16cd4aa0f21004db2dfbe4)).
|
|
8
|
+
|
|
3
9
|
## 0.0.1
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -129,5 +129,6 @@ not claimed.
|
|
|
129
129
|
- No invented Grok thinking summary: current RunInference measurements provide an opaque
|
|
130
130
|
continuation signature but no reasoning text for Grok 4.6.
|
|
131
131
|
|
|
132
|
-
See
|
|
133
|
-
[
|
|
132
|
+
See the
|
|
133
|
+
[implementation and verification record](https://github.com/victor-software-house/pi-cursor/blob/main/docs/plan.md)
|
|
134
|
+
and [protocol and scope decisions](https://github.com/victor-software-house/pi-cursor/blob/main/docs/decisions.md).
|
package/docs/brand.md
CHANGED
|
@@ -15,7 +15,8 @@ isometric geometry, and it must stay that way.
|
|
|
15
15
|
| [`mark-dark.svg`](mark-dark.svg) | Same geometry, graphite field. |
|
|
16
16
|
| [`banner.svg`](banner.svg) | README header, 1200×240. |
|
|
17
17
|
| [`banner-dark.svg`](banner-dark.svg) | Same, graphite field. |
|
|
18
|
-
|
|
|
18
|
+
| `gallery.svg` | pi.dev package card, 3840×2160 on a 1200×675 design grid. Repository-only: it is **not** in the package `files` whitelist, so do not link to it from a packaged file — see [Gallery](#gallery). |
|
|
19
|
+
| [`gallery.png`](gallery.png) | The shipped card image, rendered 1:1 from `gallery.svg`. |
|
|
19
20
|
|
|
20
21
|
Pair the two fields with `<picture>` and `prefers-color-scheme`. **Never recolour a single file at
|
|
21
22
|
the call site**, and never scale the mark to supply padding — see [Construction](#construction).
|
|
@@ -191,6 +192,98 @@ Tracking is applied as extra advance **after** each glyph, so the pen origin is
|
|
|
191
192
|
first glyph's advance, not of its ink. The ink starts one left-side-bearing further right, which is
|
|
192
193
|
why the wordmark's first path coordinate is not 210.
|
|
193
194
|
|
|
195
|
+
## Gallery
|
|
196
|
+
|
|
197
|
+
pi.dev renders package media in a **232×129.625** box with `object-fit: cover`, so the source must be
|
|
198
|
+
exactly 16:9 or the card crops it. `gallery.svg` and `gallery.png` are **3840×2160 (4K)**, with the
|
|
199
|
+
SVG retaining a `0 0 1200 675` design grid so the construction coordinates below stay readable.
|
|
200
|
+
Resolution is not the layout contract: 16:9 is. Never reduce the raster below 4K. The bordered card's
|
|
201
|
+
inner image box still trims about **2.26 design-grid units off the top and bottom**, so nothing may
|
|
202
|
+
sit at the vertical edges.
|
|
203
|
+
|
|
204
|
+
The card is **full bleed and opaque**: no outer corner radius, no inset hairline, no transparent
|
|
205
|
+
pixel. A radius here doubles against the card's own corners, a hairline loses its horizontal runs to
|
|
206
|
+
the trim and reads as a frame missing two sides, and transparent corners composite unpredictably
|
|
207
|
+
against a page field we do not control. There is one field only: pi.dev serves a single image URL, so
|
|
208
|
+
the gallery has no dark variant to pair.
|
|
209
|
+
|
|
210
|
+
This is not the banner cropped or rescaled. It is a centred vertical stack — mark tile, wordmark,
|
|
211
|
+
tagline, chip — sized for a thumbnail. The wordmark-to-tagline size ratio widens from the banner's
|
|
212
|
+
3.53 to **4.33** so the wordmark still reads at 232px wide while the tagline stays one exact line.
|
|
213
|
+
|
|
214
|
+
### Gallery geometry
|
|
215
|
+
|
|
216
|
+
| Element | Geometry |
|
|
217
|
+
|:--|:--|
|
|
218
|
+
| Field | `0,0 1200×675`, no radius, opaque `#ecedef` |
|
|
219
|
+
| Stack | centred on `x 600`; top `y 92`, bottom `y 582.24`; margins 92 top, 92.76 bottom |
|
|
220
|
+
| Mark tile | `496,92 208×208`, rx 39, **inverted field** |
|
|
221
|
+
| Mark placement | `X = 496 + 6.5u`, `Y = 92 + 6.5u` — the 32-unit mark at 6.5× |
|
|
222
|
+
| Wordmark | pen origin `x 339.48`, baseline 427.5; ink 343.64–856.36, pen end 854.28 |
|
|
223
|
+
| Tagline | pen origin `x 239.48`, baseline 483.1; ink 241.9–958.09, pen end 959.48 |
|
|
224
|
+
| Chip | `486.88,529.74 226.25×52.5`, rx 12.5; outline inset 0.94, stroke 1.88; right edge **713.13** |
|
|
225
|
+
| Chip glyph | `511.88,547.24 5×17.5`, magenta — one slab of the mark |
|
|
226
|
+
| Chip label | pen origin `x 531.88`, baseline 563.49; ends at 687.88, right pad 25.25 |
|
|
227
|
+
|
|
228
|
+
Three vertical gaps carry the grouping, measured **ink box to ink box**, not baseline to baseline:
|
|
229
|
+
tile bottom → wordmark ink top **52**, wordmark ink bottom → tagline ink top **22**, tagline ink
|
|
230
|
+
bottom → chip top **44**. Ink heights are 91.1 for the wordmark and 20.64 for the tagline.
|
|
231
|
+
|
|
232
|
+
**The tagline gap is exactly half the chip gap, and that ratio is load bearing.** At the card's
|
|
233
|
+
0.19333× those three gaps become 10.1, 4.3 and 8.5 px. Equalise them and the card shows three
|
|
234
|
+
equidistant grey lines instead of a wordmark with its subtitle and a separate chip.
|
|
235
|
+
|
|
236
|
+
The mark tile is 208, not 200, because `u = 6.5` puts every half-unit coordinate of
|
|
237
|
+
[Construction](#construction) on an exact two-decimal value. At `u = 6.25` the slabs land on
|
|
238
|
+
`x.xx5` and the rotation check below fails on rounding alone.
|
|
239
|
+
|
|
240
|
+
The chip is the banner chip scaled by **1.25** (label 16 → 20px): box `181×42 rx 10` →
|
|
241
|
+
`226.25×52.5 rx 12.5`, glyph `+20,+14 4×14` → `+25,+17.5 5×17.5`, label pen `+36` → `+45`, label
|
|
242
|
+
baseline `+27` → `+33.75`. The 45 / 25.25 padding asymmetry is intentional — the magenta bar occupies
|
|
243
|
+
the left — so centre the **box** on `x 600`, never the label inside the box.
|
|
244
|
+
|
|
245
|
+
### Regenerating the gallery outlines
|
|
246
|
+
|
|
247
|
+
Run the script in [Regenerating the outlines](#regenerating-the-outlines) with this `RUNS` instead.
|
|
248
|
+
Wordmark **Black 104px with −5.2 tracking** (the banner's −0.05 em), tagline **Medium 24px**, chip
|
|
249
|
+
label **Regular 20px**; the three strings are the banner's, unchanged.
|
|
250
|
+
|
|
251
|
+
```python
|
|
252
|
+
RUNS = [
|
|
253
|
+
("wordmark", "pi-cursor", "Black", 104, 339.48, 427.5, -5.2),
|
|
254
|
+
("tagline", "/cursor in Pi · unofficial routed Cursor inference", "Medium", 24, 239.48, 483.1, 0),
|
|
255
|
+
("chip", "/cursor usage", "Regular", 20, 531.88, 563.49, 0),
|
|
256
|
+
]
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
The mark slabs are baked at `496 + 6.5x, 92 + 6.5y`, exactly as the banner bakes them at 3.5×. The
|
|
260
|
+
file carries **no `transform` attribute anywhere**; a `translate … scale` wrapper makes every number
|
|
261
|
+
in the table above unverifiable.
|
|
262
|
+
|
|
263
|
+
### Gallery verification
|
|
264
|
+
|
|
265
|
+
Anything that regenerates the two gallery files must still pass all of it:
|
|
266
|
+
|
|
267
|
+
1. `xmllint --noout docs/gallery.svg`, intrinsic `width="3840" height="2160"`, a proportional
|
|
268
|
+
`viewBox="0 0 1200 675"`, and a non-empty `aria-label`.
|
|
269
|
+
2. No `<text>`, `font-family`, `@font-face`, `base64`, `<image>`, `<script>`, `<metadata>`, comment,
|
|
270
|
+
editor namespace, or filesystem path. The file is one `<svg>`, four `<rect>` and five `<path>`,
|
|
271
|
+
and its only URL is the SVG namespace. Also no `transform` — that one is **gallery-only**, not an
|
|
272
|
+
omission from the shared list, because [Gallery geometry](#gallery-geometry) is stated in absolute
|
|
273
|
+
coordinates and a wrapper transform would make every number in it unverifiable.
|
|
274
|
+
3. `magick identify -format '%w x %h %[opaque]' docs/gallery.png` → `3840 x 2160 True`. The raster
|
|
275
|
+
must remain 16:9 and at least 4K; higher resolutions are allowed. The PNG must equal the SVG
|
|
276
|
+
render: `magick compare -metric AE <render> docs/gallery.png null:` → `0`.
|
|
277
|
+
4. Rotate each unit slab by `(x,y) → (32−y, x)` and confirm the set is closed, as in
|
|
278
|
+
[Construction](#construction). Never check the mark by eye.
|
|
279
|
+
5. Simulate the card **from the PNG**, never by rendering the SVG small — pi.dev resamples a bitmap,
|
|
280
|
+
and a small SVG render is crisper than anything a visitor sees:
|
|
281
|
+
`magick docs/gallery.png -filter Lanczos -resize 232x131! -gravity center -crop 232x130+0+0 card.png`.
|
|
282
|
+
Look at it, and at 2× (`464x261` cropped to `464x260`). Every 3-unit gap in the mark must still be
|
|
283
|
+
open and the magenta slab must still be visible.
|
|
284
|
+
6. Render with `FONTCONFIG_FILE` pointing at a config whose only `<dir>` is empty, and confirm the
|
|
285
|
+
output is pixel-identical to a normal render.
|
|
286
|
+
|
|
194
287
|
## Verification
|
|
195
288
|
|
|
196
289
|
Anything that regenerates these files must still pass all of it:
|
package/docs/gallery.png
CHANGED
|
Binary file
|
package/package.json
CHANGED