Development and release
Repository layout
| Path | Responsibility |
|---|---|
| src/ | Published TypeScript/React Native source |
| example/ | Native Expo reference app and manual verification surface |
| doc/ | Docusaurus site |
| src/**/tests | Unit and protocol tests (there is no top-level tests/ directory) |
| .github/workflows/ci.yml | Pull request lint, typecheck, tests, native export, and docs build |
| .github/workflows/deliver.yml | Manual package delivery and example-app updates |
| .github/workflows/deployment-notes.yml | Records deployment metadata for repository pushes |
| .github/workflows/sync-docs-to-ovok-docs.yml | Syncs Mobile SDK guides into Actimi/ovok-docs |
| .github/workflows/vercel.yml | Builds and deploys the Docusaurus site |
| deployment-logs/ | Generated deployment notes; do not edit as documentation source |
Local checks
Run the checks that match the change:
yarn lint
yarn build
yarn test
yarn prepare
yarn docs:generate
yarn docs:api:check
yarn doc build
yarn docs:generate refreshes the public API entry-point map and the full LLM
reference. yarn docs:api:check confirms the checked-in entry-point map matches
package exports and source barrels. Documentation changes must also pass yarn doc build
and git diff --check.
Bluetooth or health changes also need protocol/service tests and physical-device
verification where possible.
Version and publishing safety
The package version is stored in the root package.json. Documentation-only changes do not require a version bump. Package publishing is controlled by the manual Deliver workflow; merging a pull request is not a substitute for approving a release.
Before a release:
- Confirm the intended package version and @ovok/core peer range.
- Build the library and docs.
- Run the unit tests.
- Verify the generated package contents.
- Trigger Deliver with the exact version and an explicit publish choice.
- Verify the published package with npm view @ovok/native at the exact version.
Behavior changes, new public hooks, queue semantics, and native configuration changes must use a minor version. Patch releases must not change runtime behavior. If a native release raises its required @ovok/core range, publish the core package first, then update the native peer range and release the native package.
Release notes must call out behavior changes explicitly, including altered callback ordering, retry/idempotency rules, date restoration, background permissions, native configuration, peer dependencies, and any new required app setup. A docs-only change can remain unversioned when it does not change the published runtime contract.
Do not run a local release command casually: the configured release tool can create a git tag, GitHub release, and npm publication.
Documentation source of truth
The package export map, src/index.tsx, and module index files define the public entry points. The generated public API table records those paths; module descriptions and usage guidance remain maintained in the docs. Device support is defined by SUPPORTED_DEVICES and its declarations. The example app is the reference for native configuration and provider composition. When a page claims an export or prop, verify it against those files before merging.