release notes · v0.2.20
skylakegrep 0.2.20 — hero card geometry fix · pill row stable in raster too
This is a documentation-surface release, not a code-path release. Zero behaviour change, byte-compatible 0.2.19 indexes, same wheel surface, same CLI, same JSON contract.
What changed
A reviewer screenshot of the live hero card on the GitHub Pages site showed two visible defects:
- The third result row (
utils/jwt.py :22-39) had its line- range text positioned atx=100, bututils/jwt.py(12 chars in the 12.5 px monospace) occupiesx ≈ 16 → 106. The colon and the path collided — visually rendering asutils/jwt.py22-39. - The third result card overflowed the terminal frame's
bottom border by ~6 px. The card's height was 358 px; the body
starts at
y=64inside the card; result 3 lives at body-y=220with height 80, so it ended at card-y=364— 6 px below the 358-px card edge.
Both fixed:
utils/jwt.pyline-range moved fromx="100"→x="120", giving a +14 px gap (matches the +15 px gap on result-2'sauth/middleware.pyrow).- Terminal card height bumped from 358 → 380 px; SVG
viewBoxheight from 600 → 620; bg + vignette rects updated to match. Result 3 now ends at card-y=364with a clean 16 px bottom margin.
A static text-position sanity check now runs against the hero SVG:
✓ 'auth/refresh.py' (15 chars) end≈128, ':' starts at 138, gap +9.5px
✓ 'auth/middleware.py' (18 chars) end≈151, ':' starts at 166, gap +15.0px
✓ 'utils/jwt.py' (12 chars) end≈106, ':' starts at 120, gap +14.0px
card height = 380, result-3 bottom = 364, ✓ fits
Two related XML / raster issues caught while sweeping
While doing the overall review (整体看一下), I caught and fixed
two more issues no one would have seen yet:
cli-cheatsheet.svghad an unescaped<query>literal in its<desc>element, which made cairosvg refuse to parse the file. Switched to<query>so the SVG is XML-valid and rasterisable.configuration.svghad an unescaped&inIndexing & rerankinside its<desc>. Same problem, same fix:&.
Neither showed in browser-rendered SVG (browsers are lenient), but both broke the cairosvg PNG-rasterisation pipeline.
Pill-row tspan stability
The hero brand block and the og-image both had a version-pill row
that mixed text content with leading/middle <tspan> elements
under text-anchor="middle". cairosvg has a known limitation here
— it positions each tspan independently rather than as inline-flow,
producing visible overlap in the rasterised PNG (seen as
PolyForm-NC-v0.2.20Python 3.9+). Browsers render correctly per
SVG spec, but social-preview crawlers (Twitter, Facebook,
LinkedIn) fetch the cached og-image.png directly — so
rasterisation accuracy matters for unfurls.
Switched both pill rows to a single flat-text element with the cyan accent applied to the whole line. Same information, identical visual rhythm in browser and crawler renders. No more overlap.
Compatibility
- Python: unchanged — 3.9+
- Default embedder / LLM router: unchanged
- Wheel surface: unchanged
- Index format: byte-compatible with 0.2.19
- JSON output schema: unchanged
Bench numbers
Unchanged from 0.2.19. 30 / 30 public-OSS recall holds.
Eight-surface checklist
- [x]
pyproject.toml0.2.19 → 0.2.20 - [x]
docs/skylakegrep-0.2.20.md(this file) + renderedskylakegrep-0.2.20.html - [x]
README.mdv0.2.20 in pill text - [x]
docs/index.htmlv0.2.20 in why-grid header - [x]
docs/changelog.html— 0.2.20 release card - [x]
docs/assets/hero-dark.svg— card height 358→380, viewBox 600→620, line-range x 100→120, pill row flattened to plain text - [x]
docs/assets/og-image.svg— pill row flattened to plain text - [x]
docs/assets/og-image.pngre-rasterized - [x]
docs/assets/cli-cheatsheet.svg—<query>escaped - [x]
docs/assets/configuration.svg—&escaped - [x] All 6 SVG version pills bumped 0.2.19 → 0.2.20
- [x] PyPI upload (manual
twine) - [x] GitHub Release with attached wheel + sdist
- [x]
git tag -a v0.2.20+ push
Acknowledgments
Reviewer caught the row-3 overflow and the path-range collision in one screenshot — "the third row at the bottom isn't done well, the border came out, please fix it; then look overall." — fair point; fixed plus three more issues caught in the sweep.