Skip to content

RR-55: CLI and registry scripts on the 0.14 sibling APIs (merge after render/pptx 0.14 publish) - #442

Merged
michaeljgrimm merged 8 commits into
mainfrom
codex/rr-55-cli-peers
Oct 7, 2026
Merged

michaeljgrimm merged 8 commits into
mainfrom
codex/rr-55-cli-peers

Conversation

@michaeljgrimm

@michaeljgrimm michaeljgrimm commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

The CLI (packages/cli) and the registry-consumer scripts on the published 0.14 set. Based on main (core 0.14.0 release, #444). Ready to merge: every package it needs is on npm.

The set

release-plan.json now names core 0.14.0 (f9e9433), opf-render 0.14.0 (66866e5c), opf-pptx 0.14.0 (ac946771) and opf-editor 0.14.2 (d4216427; 0.14.0 and 0.14.1 were never published). verificationRefs and exampleRefs are the npm gitHeads. The CLI entry (0.11.0) and bundledCore are untouched: release-train prep cli moves them.

CLI

  • Uses only the 0.14 APIs of its optional peers (no compatibility path). Peer ranges ^0.14.0, devDependencies 0.14.0, pnpm-lock.yaml refreshed (17 lines: the CLI importer's two peers and the core they depend on).
  • Old to new: prepareNodeFonts is loadFonts (the handle goes as { fonts } to paginate, renderSlideSvg, svgToPng, svgToPdf, toPptx); renderSvg(deck, { slideIndex }) is renderSlideSvg(deck, index, ...); fromPptx(..., { signals: true }) returns { presentation, signals }; a thrown OPFRenderError, OPFPptxError or OPFValidationError with findings is reported as those findings.
  • pdf.vectorSupported is gone (vector is the default). signals.version is the version the signals carry.
  • A 0.13 peer exits 2 with peer-too-old and the install command (the CLI checks features: loadFonts, renderSlideSvg, inventoryTypefaces).
  • The golden SVG digests (render-hashes.json) are generated with UPDATE_GOLDEN=1 against the published opf-render 0.14.0: the three digests are unchanged, only the labels moved (0.12.0 to 0.14.0), so files.mjs compares them again instead of skipping.
  • Changelog fragment changes/rr-55-cli-peers.md.

Registry scripts

Moved to the 0.14 names, and their published 0.13 variants deleted: the published-matrix consumer and engines-installed.mjs (plain re-exports), browser-check, test-packed-ecosystem, the developer quickstart, layout-contract, native-quote, native-feature-matrix, native-powerpoint, probe-code-native, the code, quote and metric geometry and browser scripts (fonts: to fontFamilies where 0.14 ignored it), the registry gallery editor (lazyFontsBaseUrl now decides whether lazy-fonts.json ships), the site showcase, the deployed-font check, the installed-parity font host, and the two evidence fixtures that still used { family } font roles. probe-code-layout-gap, probe-metric-layout-gap, probe-payload-fit-gaps and review-metric-corpus pin old versions on purpose and are unchanged. The matrix consumer package.json and lock are refreshed by prepare-consumer.mjs --update-lock.

The plan-CLI gate

The plan still names CLI 0.11.0, whose optional peers are opf-render ^0.13.1 and opf-pptx ^0.13.2. Installing it beside the planned 0.14 libraries fails with ERESOLVE (reproduced with npm), and its commands call the 0.13 APIs. scripts/release-plan-cli.mjs decides on that exact condition: it reads the plan CLI's peerDependencies from the registry (injectable reader) and skips it only when the plan's render or pptx do not satisfy them. A read failure is an error, never a silent skip. The registry consumer (test-packed-ecosystem --registry), the developer quickstart, test-registry-fidelity and the registry toolchain leave the CLI out and print: "release plan's CLI 0.11.0 requires opf-render ^0.13.1, opf-pptx ^0.13.2; the plan has opf-render 0.14.0, opf-pptx 0.14.0: skipped until a compatible CLI is in the plan". They run the CLI again as soon as prep cli puts CLI 0.14.0 (peers ^0.14.0) in the plan; no shim. Unit tests: pnpm check:release-plan-cli (8 tests: semver, mismatch, match, missing peers, read failure, this checkout's ranges). packages/cli/test/packed.mjs --registry installs the plan CLI alone and is not gated.

Docs sweep

docs/, skills/, README.md and the package READMEs describe the current API: loadFonts and { fonts }, deck-level renderSvg and renderSlideSvg, .presentation on editor sessions and results, the browser loadFonts and canvas fonts option, validate/Findings. Files: docs/quickstart.md, docs/font-fidelity.md, docs/live-editor.md, docs/dynamic-composition.md, docs/compatibility-matrix.md, docs/design-resolution.md, docs/templates-and-variables.md, docs/yaml.md, docs/cli.md, packages/cli/README.md, skills/opf-export/references/rendering.md, skills/opf-edit/references/editor.md, skills/opf-layout/references/geometry.md, plus the current-set lines of README and six more pages. docs/programs, docs/evidence, docs/plans, changelogs and the compatibility matrix's history rows are untouched.

Results (Node 24.21.0, Windows, against the published 0.14 packages)

  • pnpm --filter @openpresentation/cli test: 91 node:test tests, cli.mjs 92 checks (1 symlink check skipped on this account), files.mjs 84 checks with the golden compared. pnpm test:cli:packed and pnpm test:cli:packed:peers (render and pptx 0.14.0 from npm) pass.
  • node scripts/check-changed.mjs on the 44 changed files: biome, check:changes, check:engines-range, check:font-tracker, check:gallery-tracker, check:release-plan-cli, check:release-report, check:runners, check:text, check:works-percent, typecheck and CLI tests pass. check:schema-docs and test:skills pass.
  • Registry (real npm, the four 0.14 libraries): test-packed-ecosystem --registry (includes test-installed-code --registry), test-packed-browser registry (canvas, rich-text, layout, block, list, create, styled-table), test-layout-contract-registry (100 layouts), test-registry-fidelity, test-installed-code-guards --registry, quote geometry (6), code geometry (8) and browser (8), metric guards, metric geometry (60) and browser (50), pnpm test:developer-quickstart.
  • Published-matrix: prepare-consumer.mjs (tsc NodeNext, Bundler, emit), the TypeScript consumer, browser-check.mjs in Chromium, and the full font-switch matrix through engines-installed.mjs with the opf-v0.14.0 harness (61 of 61 decks, 18 switches, 274 states) pass.
  • Not run: the CLI part of the registry scripts (gated), the PowerPoint steps of the native scripts, the full installed-parity run over the gallery snippets, build-registry-gallery-editor and build-site-showcase --registry against the final plan (both passed earlier with the editor tarball in the slot).

🤖 Generated with Claude Code


Note

Medium Risk
Breaking change for CLI optional peers and many integration scripts; incorrect peer gating or API mismatches could break CI/registry checks until the CLI train catches the plan.

Overview
RR-55 moves the CLI and registry consumer tooling onto the coordinated 0.14 sibling APIs and bumps release-plan.json (core/renderer/pptx/editor pins and verification refs). The CLI now requires peers ^0.14.0, loads fonts once via loadFonts, passes { fonts } through render/export/import, uses renderSlideSvg per slide, reads fromPptx(..., { signals: true }) as { presentation, signals }, defaults PDF to vector (drops pdf.vectorSupported), and surfaces thrown library findings in reports; 0.13 peers fail with peer-too-old.

Registry scripts, parity harnesses, gallery editor build, published-matrix consumer, and smoke tests are updated to the same names (validate, renderSvg, editor.presentation, etc.); old 0.13 shims and duplicated published variants are removed. Docs and README pins/examples are swept to 0.14.0 and the new font/render API. A check:release-plan-cli gate skips installing/running plan CLI 0.11.0 beside 0.14 libraries when peer ranges conflict, until prep cli lands a compatible CLI.

Reviewed by Cursor Bugbot for commit 368cb75. Configure here.

@michaeljgrimm
michaeljgrimm force-pushed the codex/rr-55-short-verb-api branch from 43d051c to 2c6c2eb Compare October 7, 2026 07:23
@michaeljgrimm
michaeljgrimm force-pushed the codex/rr-55-cli-peers branch from c703f63 to 24478ea Compare October 7, 2026 07:55
@michaeljgrimm
michaeljgrimm changed the base branch from codex/rr-55-short-verb-api to main October 7, 2026 07:55
The CLI calls opf-render and opf-pptx through their 0.14 APIs and its peer
ranges are ^0.14.0; the registry-consumer scripts move with it.

CLI: loadFonts handle passed as { fonts } to paginate, renderSlideSvg, svgToPng,
svgToPdf and toPptx; fromPptx(bytes, { signals: true }) reads { presentation,
signals }; a thrown peer error's findings are reported as findings; the PDF
probe, the signals version guard and every 0.13 code path are removed.

Scripts: published-matrix consumer and engines-installed.mjs, browser-check,
developer quickstart, layout-contract, native-quote, native-feature-matrix,
native-powerpoint, probe-code-native, code and metric and quote geometry and
browser checks, registry gallery editor, site showcase, deployed-font check,
packed ecosystem consumer and the installed-parity font host use the 0.14 names.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@michaeljgrimm
michaeljgrimm force-pushed the codex/rr-55-cli-peers branch from 24478ea to a77a4ed Compare October 7, 2026 11:01
michaeljgrimm and others added 6 commits October 7, 2026 04:08
…flict with the plan

When release-plan.json names a CLI whose optional peer ranges (opf-render,
opf-pptx) the plan's own render and pptx do not satisfy, installing it beside
them fails with ERESOLVE and its commands call the previous sibling APIs. The
registry consumer, the developer quickstart, the registry fidelity run and the
registry toolchain leave it out and print a notice naming the mismatch.

The condition is exact: scripts/release-plan-cli.mjs reads the plan CLI's
peerDependencies from the registry (injectable reader) and checks them with a
small semver implementation. A failed registry read is an error. The CLI runs
again as soon as the plan names one whose ranges the plan satisfies.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The three pinned SVG digests are unchanged; only the renderer and core labels
move (0.12.0 to 0.14.0), so files.mjs compares them again instead of skipping.
Generated with UPDATE_GOLDEN=1 against the published opf-render 0.14.0 (66866e5).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The CLI's devDependency peers move to the published 0.14.0 packages; the lock
changes only their entries and the core they depend on (0.13.0 to 0.14.0).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
release-plan.json names core 0.14.0 (f9e9433), opf-render 0.14.0 (66866e5c),
opf-pptx 0.14.0 (ac946771) and opf-editor 0.14.1 (head to be set when it
publishes); the CLI entry and bundledCore stay for `release-train prep cli`.
The quickstart version block and the pages that name the current set follow.

The docs and skills that still showed the removed or renamed names now show the
0.14 API: loadFonts and the fonts handle ({ fonts }), deck-level renderSvg and
renderSlideSvg, editor.presentation and .presentation results, the browser
loadFonts and canvas `fonts` option, and the compatibility matrix rows.

The published-matrix engines-installed.mjs exports presentationOf again: the
harness of the plan core's release tag (opf-v0.14.0) reads an editor session
through it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
0.14.0 and 0.14.1 were never published; the editor head stays the placeholder
until 0.14.2 is on npm.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
release-plan.json records opf-editor 0.14.2 at its npm gitHead (d4216427) for
verificationRefs and exampleRefs; the matrix consumer package.json and lock are
refreshed by prepare-consumer.mjs --update-lock to the published 0.14 set.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@michaeljgrimm
michaeljgrimm marked this pull request as ready for review October 7, 2026 18:42
@cursor

cursor Bot commented Oct 7, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: e06f37eb-499f-4749-9252-0b7884e5e175)

…rer API

editor.document -> editor.presentation, and renderSvg returns one SVG per
slide in 0.14 (joined before matching). The downstream block only runs
when the published siblings share core's line, so 0.14 is its first run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cursor

cursor Bot commented Oct 7, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: 8fad50df-6861-4f54-b982-e70aa05fb3a1)

@michaeljgrimm
michaeljgrimm added this pull request to the merge queue Oct 7, 2026
Merged via the queue into main with commit 151a586 Oct 7, 2026
20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant