Ship 0.9.1: sealed surface (no extra items shared in build folder) and more aligned/connected package README docs#83
Merged
Conversation
cameronapak
force-pushed
the
claude/sdk-version-consolidation-c02a87
branch
from
July 14, 2026 16:01
52bd567 to
1765f8e
Compare
davidfedor
requested changes
Jul 14, 2026
jhampton
approved these changes
Jul 15, 2026
jhampton
left a comment
Collaborator
There was a problem hiding this comment.
Responded to some of David's comments for context, but overall this LGTM for our 0.9.1
cameronapak
force-pushed
the
claude/sdk-version-consolidation-c02a87
branch
from
July 16, 2026 17:28
937c1fb to
3007299
Compare
Fold API-relevant changeset content into the curated 1.0.0 CHANGELOG entries and remove the nine pending changesets. Both packages stay at 1.0.0 (unpublished), so everything ships as the initial release. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add a root-only `exports` map to both packages so consumers can only import from the package root (`@youversion/platform-react-native-expo-ui` and `-core`). Deep imports into internal build files (e.g. `.../build/dom/bible-card`) are no longer supported: Node resolution and TypeScript reject them, keeping the internal file layout non-API before the first real release (0.9.1). - exports["."] -> src/index.ts for dev; publishConfig.exports swaps to build/index.js + build/index.d.ts at publish (verified applied in the pnpm pack tarball). `./package.json` stays exposed. - ADR 0011 gains a "Sealed import surface" section, including the enforcement boundary: Node and TypeScript enforce the seal strictly, Metro does not (it falls back to filesystem resolution for unmatched subpaths even with unstable_enablePackageExports on). - CONTEXT.md and both CHANGELOGs note the sealed root-only surface. Verified: typecheck/test/build green; tarball root import resolves to build/index.js, types resolve under node16 + bundler, deep imports throw ERR_PACKAGE_PATH_NOT_EXPORTED; example app and a fresh SDK 56 app built from the tarballs both bundle; the fresh app renders real Bible content (VerseOfTheDay + BibleTextView) on an iOS simulator. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Un-export DEFAULT_BIBLE_VERSION_ID per review: the constant stays internal as the default for BibleCard/BibleReader/picker sheets, but the SDK no longer publishes an official default version id. README examples pass 3034 literally instead. Also applies the reviewed copy edits to the package READMEs and the UI changelog. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Per review: the installation id is automatic and doesn't warrant a "when you need this package" bullet. It stays mentioned in the intro line. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
PR #85 landed on main with a pending changeset. Consuming it here keeps .changeset/ empty, which is what makes the release workflow publish on merge instead of opening a "Version Packages" PR. The attribution behavior is folded into the 0.9.1 UI changelog as part of the initial release rather than as a fix, since there is no prior release to have regressed from. Core is untouched — the changeset marked UI only. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The ADR documented the stamp's fail-closed guard but was silent on what happens when a release is retried, leaving the guard's "refuses to re-stamp" behavior to read as a retry hazard. It isn't one. `expo-module prepublishOnly` is `expo-module clean && expo-module build`, so `build/` is regenerated from source — anchor back at `= false` — before the stamp runs. A retried release meets exactly one anchor again rather than the `= true` file from the previous attempt. The transform stays deliberately non-idempotent: it throws `found 0` on already-stamped input, and nothing on the publish path reaches the stamp without a rebuild in front of it. That distinction is what the ADR was missing. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
PR #86 landed on main with a pending changeset. Consuming it here keeps .changeset/ empty, which is what makes the release workflow publish on merge instead of opening a "Version Packages" PR. The pinning is folded into the 0.9.1 UI changelog as a durable property of the package surface rather than as a change, since there is no prior release to have pinned differently. Core is untouched — the changeset marked UI only. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
cameronapak
force-pushed
the
claude/sdk-version-consolidation-c02a87
branch
from
July 16, 2026 17:58
3007299 to
fbaf002
Compare
The "Update npm to latest version" step claimed trusted publishing needed npm >= 11.5, or the OIDC handshake would silently fall back to NPM_TOKEN. That mechanism does not exist on this path. `changeset publish` shells out to `pnpm publish`, and pnpm 11 publishes over HTTP itself and runs the OIDC handshake in its own code. There is no `runNpm` on pnpm 11's publish path at all, so the npm on the runner never sees the token and its version cannot affect auth. npm is still invoked once per package for `npm info`, a read-only metadata query that any npm handles, so removing the global upgrade is safe. Correct the surrounding comments to match, since a misleading comment on the first CI publish sends whoever debugs it chasing a dead mechanism: - Describe the OIDC handshake as pnpm's rather than npm's. - Keep NPM_CONFIG_PROVENANCE as an explicit no-op. pnpm reads PNPM_CONFIG_* and ignores it; provenance is auto-enabled by pnpm's OIDC path for public repos on GitHub Actions. That last part is read from pnpm's source, not observed, so the var stays until a real run proves it redundant. - Fix the NODE_AUTH_TOKEN fallback, which as written would not have worked. pnpm never reads NODE_AUTH_TOKEN; it only arrives via an .npmrc, which actions/setup-node writes only when given a `registry-url`, and our setup action does not set one. Document both halves the fallback needs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
davidfedor
approved these changes
Jul 16, 2026
jhampton
approved these changes
Jul 17, 2026
jhampton
left a comment
Collaborator
There was a problem hiding this comment.
Just comments. Approved.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
✅ I want to get #85 in before this PR
Warning
Merging this PR publishes 0.9.1 to npm immediately — zero pending changesets + an unpublished version puts the release workflow on its publish path. Don't close PR #63; the changesets action resolves it once
mainhas no changesets.Summary
Ships both packages as
0.9.1— the first release with real changelogs — by replacing the nine pending changesets with curated initial-release notes and sealing the import surface to the package root before anyone can depend on internals.Changes
0.9.1with curated initial-release changelogs: the nine pending changesets are deleted, their user-relevant content (prop-type exports,showVersionPickerdefault, iPad sheet width cap, auth hardening) folded in, and pre-release polish dropped as fixes to a release that never shipped.exportsmaps in both packages (src/in dev, swapped tobuild/at publish viapublishConfig.exports); deep imports likebuild/dom/*stop resolving under Node and fail typecheck. (this makes it where people cannot depend on package internals that they don't need to use)pnpm buildlocally no longer starts atscwatcher (root build runsexpo-module buildwithCI=true).DEFAULT_BIBLE_VERSION_IDis no longer exported (review feedback: the SDK shouldn't publish an official default). It stays internal as the default forBibleCard/BibleReader/ the picker sheets; README examples pass3034literally.Start here: change 2 — Metro (even with package exports on) falls back to filesystem resolution for unmatched subpaths, so the seal is enforced by TypeScript and Node resolution, not physically by the RN bundler. ADR 0011 records this honestly.
Test plan
pnpm typecheck/pnpm test(309 tests) /pnpm buildgreen; full CI (including Greptile) green on head0271c53pnpm packtarballs installed in a scratch project: root import resolves tobuild/index.js; types resolve undermoduleResolution: node16andbundler; deep import throwsERR_PACKAGE_PATH_NOT_EXPORTED;'use dom'is line 1 ofbuild/dom/*.js;publishConfig.exportsconfirmed applied in the packedpackage.jsonapps/exampleMetro iOS bundle succeeds with the newexportsfieldVerseOfTheDay(Revelation 3:20 BSB) andBibleTextView(John 3:16) on an iOS simulator — retires PUBLISHING.md's first-publish device gatechangeset statusconfirms zero pending changesets (ui→corestaysworkspace:*;changeset versionwas not run)prettier --checkpasses; docs page verified live; cross-links use absolute npm URLs (repository.directoryis set, so relative./LICENSE/./package.jsonlinks resolve on npm)🤖 Generated with Claude Code
Greptile Summary
This PR prepares the SDK packages for the 0.9.1 npm release. The main changes are:
Confidence Score: 5/5
This looks safe to merge.
Important Files Changed
Reviews (9): Last reviewed commit: "ci: drop the inert npm upgrade from the ..." | Re-trigger Greptile
Context used (10)