openpencil/crates
Fini 98f70579bf fix(ai): compare the CJK tracking cap as a ratio, not a rounded number
The negative-tracking cap was stated as `round(fontSize * -0.02)`, and
rounding it was wrong in both directions: at 76px it let -2 through when
the real cap is 1.52, and at 72px it failed a legitimate -1.4 because the
cap rounded down to 1. A rule that both over- and under-fires is not a
threshold worth tuning, so the comparison is now against the ratio itself
with fractional values allowed.

Two narrowing decisions come with it. The cap applies only to runs that
actually contain Han characters — Latin and numeric display (page
numbers, stat values) legitimately sets -0.03 to -0.05em, and 160 nodes
across the library were being flagged for it. And the 64px boundary is
gone, because below 48px the ratio is already self-limiting.

The clamp sits in `text()`, the one entry every generator goes through:
a single tracking literal is routinely shared by several sizes, so
fixing call sites one at a time is guaranteed to miss some. `trackcheck`
makes the rule enforceable outside the two generators that imported the
kit, which is how the drift got in unnoticed.

Claude-Session: https://claude.ai/code/session_01FqKQqNj8exYwopGDpYUU7x
2026-08-09 21:16:35 +08:00
..
op-acp fix(services): carry cli output into failures as bounded redacted tails 2026-08-09 02:22:02 +08:00
op-ai feat(editor): chat panel round — chips, thinking, caret, hover card 2026-08-09 02:22:02 +08:00
op-ai-skills fix(ai): compare the CJK tracking cap as a ratio, not a rounded number 2026-08-09 21:16:35 +08:00
op-auth-bridge fix(collab): rotate production trust roots safely 2026-08-09 17:17:08 +08:00
op-chrome-extension-core feat(web): chrome extension offline download emits a ready-to-open .op file 2026-08-05 22:15:09 +08:00
op-cli chore: bump version to 0.8.3 2026-08-06 21:15:39 +08:00
op-codegen
op-collab
op-collab-host fix(collab): rotate production trust roots safely 2026-08-09 17:17:08 +08:00
op-collab-policy-file fix(collab): rotate production trust roots safely 2026-08-09 17:17:08 +08:00
op-collab-relay-client
op-collab-relay-control-plane
op-collab-relay-locator-hsm fix(collab): make the hsm relay locator unix-only 2026-08-09 02:22:02 +08:00
op-collab-relay-locator-server fix(collab): rotate production trust roots safely 2026-08-09 17:17:08 +08:00
op-collab-relay-protocol
op-collab-relay-server fix(collab): rotate production trust roots safely 2026-08-09 17:17:08 +08:00
op-collab-smoke fix(desktop): update collab smoke to the PeerIdentityPolicy admission API 2026-08-08 22:59:05 +08:00
op-collab-transport fix(collab): clamp kernel keepalive to whole seconds 2026-08-09 02:22:02 +08:00
op-config-store
op-design-lint refactor(agent): move the surface classifier below the orchestrator 2026-08-09 19:56:12 +08:00
op-editor-core feat(ai): teach the corpus how a projector board differs from a page 2026-08-09 19:55:26 +08:00
op-editor-host-core feat(editor): chat panel round — chips, thinking, caret, hover card 2026-08-09 02:22:02 +08:00
op-editor-ui refactor(editor): wrap multi-board templates onto rows 2026-08-09 19:55:00 +08:00
op-figma
op-git
op-host-desktop feat(editor): grow the template library to fifty-eight across six scenes 2026-08-09 02:24:43 +08:00
op-host-native test(canvas): budget isolated seam pixels in the pan-cache diff 2026-08-09 11:54:06 +08:00
op-host-services fix(web): gate unix-only signal + test helpers off the windows build 2026-08-09 13:51:50 +08:00
op-host-web feat(web): theme becomes a device preference 2026-08-09 12:36:02 +08:00
op-host-web-server chore(web): forward the dev op-auth ticket feature to the serve-web daemon 2026-08-09 12:52:07 +08:00
op-html
op-i18n feat(editor): register the six deck templates in the picker 2026-08-09 19:54:23 +08:00
op-mcp fix(mcp): stop later batches consuming named screen shells 2026-08-09 02:22:02 +08:00
op-opmerge
op-orchestrator fix(ai): compact sub-agent skills before spending the budget 2026-08-09 19:57:24 +08:00
op-pen-loader fix(renderer): hit only the active tabs panel and drop unpainted widget strokes 2026-08-09 02:24:43 +08:00
op-process-io
op-rpc-transport
op-smoke test(cli): windows-safe temp names in the modify smoke, enumerate failures 2026-08-09 12:38:23 +08:00
op-util test(desktop): unflag the redaction fixture and de-unixify relay path tests 2026-08-09 08:59:43 +08:00
op-web-sdk feat(web): fetch scene templates and the icon catalog at runtime 2026-08-09 12:26:39 +08:00
CLAUDE.md feat(editor): register the six deck templates in the picker 2026-08-09 19:54:23 +08:00