Skip to content

Releases: appandflow/stim

v1.0.0

Choose a tag to compare

@janicduplessis janicduplessis released this 10 Sep 12:44

New

  • The CLI is now published as stim. All five packages move together to the first stable release, 1.0.0. 256516b0ff
  • Select a shared Xcode app scheme with ios --scheme <name>. Explicit schemes use separate build directories and cache keys, and resolve the actual product even when its name differs. 33ecb66ff9
  • Reset one app's Metro transforms and file-map state with start --reset-cache, preserving other apps and native build caches. 7cc5276586
  • Each monorepo app reads its own committed .stim.json beside its package manifest. App-relative profiles and cache-provider paths resolve from that directory. c9fb9568a4

Fixes

  • Android's unverified-launch remedy uses the resolved launcher activity or dev-client URL to restart the app. Printed URLs preserve query parameters through both host and device shells. f2dd053af5

  • Android launch previews compact nested Metro error JSON into a readable module diagnosis, code frame and import stack. Previously unseen context is retained; logs and JSON preserve full captured evidence. 912b8fd863

  • Doctor warns about effective multi-architecture Debug simulator settings, including generated Pods and imported configuration. It reports but does not rewrite project policy. 7afb23c8da

  • Doctor identifies linked native libraries whose Git metadata enters the fingerprint and prints narrow ignore entries for projects that do not build from that metadata. 89e9280f0c

  • Android workspaces with the same app-directory name receive distinct owned emulators instead of failing on a name collision. Existing device assignments are preserved. 529f7c68f2

  • Bare iOS reload failures include an exact-app relaunch fallback when no Reload control is visible, preserving the automation session, simulator and Metro port. The remedy warns about losing in-memory state. 71484ba0ae

  • iOS resolves a listed app scheme from the static app.json name when a differently named workspace and multiple schemes make the existing selection ambiguous. The error distinguishes a naming mismatch from an unshared scheme. 5aa719fcfd

  • iOS simulator launches allow up to 60 seconds for CoreSimulator to respond, preventing the previous 10-second deadline from aborting a slow successful launch. App readiness and crash checks remain unchanged. 8221162342

  • A workspace waiting for a shared native build no longer reports failure just because native preparation changed the cache key. It retains the wait result after validating the artifact under its own final key. fd65de16ec

  • stim worktree warm copies ignored state directly into the destination, avoiding the extra staging and publication passes. Same-volume APFS copies request copy-on-write; missing paths are copied and existing entries are kept. 49ae2fce16

  • Doctor checks the actual source and destination volumes when reporting worktree-copy performance. 49ae2fce16

Docs

  • Refresh startup-crash benchmark results and keep timeline endpoint circles visible. 2d192f66e7, 591df79435
  • Document that warming must finish before editing, installing dependencies, starting Metro, building, or running another warm in the destination. Concurrent destination writes are unsupported. 49ae2fce16

Migration notes

  • Replace npx stim-cli with npx stim. For global installations, uninstall stim-cli before running npm install --global stim so the old and new packages do not compete for the same executable. The command remains stim; the four @stim-cli/* companion package names are unchanged.
  • Keep worktrees on the source checkout's filesystem for copy-on-write warming. STIM_TMPDIR does not relocate this direct copy. Wait for warm to complete before writing to its destination.
  • In monorepos, move repository-root runtime settings into each relevant app's .stim.json; apps no longer inherit that root file. Keep repository-wide worktree.exclude rules at the main checkout root. Machine-level project and repository overrides retain their precedence.

v1.0.0-rc.23

v1.0.0-rc.23 Pre-release
Pre-release

Choose a tag to compare

@janicduplessis janicduplessis released this 09 Sep 13:33

1.0.0-rc.23

Fixes

  • Launch errors show compact, labeled error, component, and native stacks with up to 10 frames each, prioritizing app code. Every stim logs query retains full captured stacks. be15388437, dfd342114e
  • Resolve JavaScript stack locations through the workspace's Metro and preserve the symbolicated context for later queries. Capture attributable native crashes on iOS simulators and Android, combine duplicate reports, and preserve Java cause chains. Native symbolication uses matching symbols where available. dfd342114e
  • Show a warning when the native app stays alive with a JavaScript launch error, and explain when a delayed iOS crash report needs another logs query. Launch JSON and exit-code contracts remain unchanged. dfd342114e

Docs

  • Clarify stack previews, full captured logs, symbolication limits, and delayed native crash reports in the version-matched guides and website. dfd342114e

QA

Expedited RC authorized on 2026-09-09. Omitted locally before the version
commit: format:check, lint, typecheck, knip, unit tests, test:e2e, test:runtime,
and the pre-tag native/manual matrix. Retained before the version commit:
candidate build, CLI version/help/guide, and tarball inspection. Retained after
push: exact-release-commit CI, including its format, lint, build, typecheck,
knip, unit, cross-platform e2e, and published-runtime jobs.

Pre-merge evidence includes JS errors on iOS and Android, Swift fatalError,
Java IllegalStateException, JNI abort, and repaired app launches on both
platforms. Captured command output.
This evidence predates the version bump; the full native matrix is not rerun
against the release candidate. Physical and remote devices were not tested.

v1.0.0-rc.22

v1.0.0-rc.22 Pre-release
Pre-release

Choose a tag to compare

@janicduplessis janicduplessis released this 09 Sep 05:02

New

  • Recycle compatible Android emulators across worktrees. Adoption clears app
    data, retains matching APKs to skip installation, and recovers from signer or
    version conflicts. The default pool holds three emulators.
    ea0292b1
  • Wait for optional [stim:readiness] pending and ready device logs during
    launch, and report whether readiness completed, timed out, or failed.
    689ad047

Removed (breaking)

  • Remove the legacy caches.injectMetroStore machine setting. Use
    optimizations.metroSharedCache instead.
    2c585854

Fixes

  • Wait for Metro to deliver the bundle before starting launch-stability checks.
    a4832aa3
  • Align Android device-log timestamps with the host clock so launch filters
    include the current app's logs.
    dd0f2c5e
  • Resolve dynamic imports from nested modules when bare Metro uses a hoisted
    metro-runtime package.
    1fe471f5
  • Restart a stuck Android app when following the unverified-launch remedy.
    6230e4aa

Docs

  • Document build optimizations, Android CAS, emulator recycling, and optional
    readiness reporting. Refresh the website and publish activity-timed Android
    and iOS launch-error benchmarks.
    2c585854,
    1f9fc1e8,
    c2f848b4

Migration notes

  • Replace caches.injectMetroStore: false with
    optimizations.metroSharedCache: false to keep shared Metro caching disabled.
  • Set pool.androidParkedMax to 0 when a fresh emulator is required.
    Recycling preserves system apps, shared storage, accounts and device settings;
    app data is cleared at adoption. Older AVDs without recorded creation settings
    are deleted when removed.

QA

  • Full preflight: formatting, lint, build, typecheck, knip, 3,737 unit tests,
    66 end-to-end tests, Node 20.19.4 runtime checks, website build, and all five
    packed tarballs passed.
  • Native loop and cache suites passed for bare React Native and Expo on both
    iOS and Android. Both device-pool suites passed.
  • Manual QA covered readiness success, timeout and error; nested dynamic
    imports; healthy, broken and repaired logs; UI interactions; and Trailhead
    on both platforms, including native cache reuse across worktrees.
  • Android release QA verified current JS in the installed, signed and aligned
    APK after adopting an emulator with a differently signed app.
  • A newly booted Android emulator can initially return unverified. Follow
    the printed restart remedy and verify the UI. The recovery instruction was
    corrected during this QA pass. iOS may require the printed UI Reload
    fallback when Metro cannot identify its peer. Earlier client errors remain
    visible until the next launch, as documented.
  • Authenticated remote providers, physical-device signing, Android flavors,
    and iOS release swapping were omitted because those implementations did not
    change. Shared launch and lease behavior has simulator/emulator and unit
    coverage.

v1.0.0-rc.21

v1.0.0-rc.21 Pre-release
Pre-release

Choose a tag to compare

@janicduplessis janicduplessis released this 07 Sep 21:20

1.0.0-rc.21

Fixes

  • Persist exact process identities for Stim-owned supervisors, log collectors,
    and managed tunnels instead of inferring host-process ownership through ps.
    Use unique-pid@0.1.1 so permitted process inspection works in macOS
    sandboxes that deny boot-session metadata. Cleanup retains unverified records
    and leaves replacement processes and their device claims alone.
    dfaeae32

Removed (breaking)

  • Remove stop --force. Stim no longer terminates externally started Metro
    servers or infers process ownership from a port, command name, or directory.
    dfaeae32

Migration notes

  • Stop a still-running legacy supervisor manually before starting a replacement
    when its saved state has no verifiable process token. Externally started Metro
    remains reusable but must be stopped by its owner.
  • Process checks and signals are separate OS operations. On macOS, a token
    captured without boot identity cannot distinguish a repeated PID and exact
    start timestamp after a reboot or clock reset. Denied process inspection is
    not treated as proof that a process exited.

QA

Expedited RC authorized on 2026-09-07. Omitted locally before the version
commit: format:check, lint, typecheck, knip, unit tests, test:e2e, test:runtime,
and the pre-tag native/manual matrix. Retained before the version commit:
candidate build, CLI version/help/guide, and tarball inspection. Retained after
push: exact-release-commit CI, including its format, lint, build, typecheck,
knip, unit, cross-platform e2e, and published-runtime jobs.

The included PR passed independent review, 3,602 unit tests, 66 end-to-end
tests, and required CI before merge. Forty collector-ownership and reclaim
tests also passed inside the actual Codex sandbox with the published library.
These checks are not a substitute for the omitted candidate native/manual QA.

v1.0.0-rc.20

v1.0.0-rc.20 Pre-release
Pre-release

Choose a tag to compare

@janicduplessis janicduplessis released this 07 Sep 15:42

When Stim is not installed globally, replace stim with npx stim-cli.

New

  • Configure build optimizations with machine defaults and repository/project overrides: artifact and remote caches, release bundle swapping, Metro sharing, iOS compilation caching and prefix mapping, and Android compiler cache, PCH, Gradle cache, and target ABI settings. See stim guide settings. a4e2251
  • Opt into experimental Android PCH caching across worktrees using Apple Clang CAS on macOS. This requires a manually prepared compatible compiler/NDK toolchain; see the Android CAS report for setup, evidence, and compatibility limits. f45d9e2

Fixes

  • Distinguish harmless executable lookups from actual device commands when auditing benchmark isolation, while retaining checks for real invocations. a563dad

Docs

  • Complete the published Android benchmark coverage and omit private inventory data from benchmark exports. df12e17

Migration notes

  • Shipping defaults are unchanged: Stim-supplied Android ccache disables PCH. CAS is a mutually exclusive opt-in through optimizations.android.compilerCache and a toolchain manifest.
  • Android compiler/PCH modes use separate generated CMake profiles so switching backends does not retain a previous compiler. Old profiles accumulate; worktree removal reclaims them.
  • CAS is experimental. Automatic toolchain installation, broader project compatibility, and CAS eviction/diagnostics remain unfinished.

QA

Expedited RC authorized on 2026-09-07. The pre-tag native and manual QA matrix was omitted.
The candidate passed formatting, lint, build, typecheck, knip, all 3,664 unit tests,
all 66 E2E tests, the runtime check, CLI version/help/guide checks, and inspection
of all five tarballs. Publishing remains gated on CI for the exact release commit,
including Node 22, Node 24, and the published Node 20.19.4 runtime.

v1.0.0-rc.19

v1.0.0-rc.19 Pre-release
Pre-release

Choose a tag to compare

@janicduplessis janicduplessis released this 07 Sep 01:48

1.0.0-rc.19

When Stim is not installed globally, replace stim with npx stim-cli.

Fixes

  • Enforce benchmark runner filesystem isolation for coordinator data and sibling runs, with verified access checks before timing starts. 5751260
  • Correct benchmark auditing of quoted shell commands and separate crash launch/error capture. e2cb47a d53bebf

Docs

  • Require worktree warming to finish successfully before starting Metro, building, or installing dependencies. A shell job ID is not completion. 35a77e4
  • Refresh validated Android and launch-recovery benchmark results on the website. e62e6f7

QA

Expedited RC authorized on 2026-09-06. Omitted locally before the version
commit: format:check, lint, typecheck, knip, unit tests, test:e2e, test:runtime,
and the pre-tag native/manual matrix. Retained before the version commit:
candidate build, CLI version/help/guide, and tarball inspection. Retained after
push: exact-release-commit CI, including its format, lint, build, typecheck,
knip, unit, cross-platform e2e, and published-runtime jobs.

v1.0.0-rc.18

v1.0.0-rc.18 Pre-release
Pre-release

Choose a tag to compare

@janicduplessis janicduplessis released this 06 Sep 12:02
48742dd

When Stim is not installed globally, replace stim with npx stim-cli.

Fixes

  • Warming an Android worktree excludes generated autolinking caches, including nested apps, so Gradle resolves native dependencies inside the new checkout. 1fac645
  • Keep large temporary copies on the operation's volume, including worktree warming and cached app preparation. STIM_TMPDIR or machine tempDir overrides placement; doctor reports cross-volume copies. 20232f3
  • Repair stale Android CMake launcher configurations with stim doctor --fix --platform android, including installed native modules. Stop all native builds before repair; custom launchers and shared ccache entries are preserved. 008d057
  • Validate benchmark cache entries with the pinned CLI's fingerprint library. 0079fb3
  • Audit benchmark device-session scoping per shell command, accepting correctly scoped delayed navigation and rejecting unscoped invocations later in a chain. 782b8c5

Docs

  • Explain the workflows where Stim adds little value on the homepage. fb82b23

QA

Expedited RC authorized on 2026-09-06 after disk pressure paused the native matrix.
The product candidate passed formatting, lint, build, typecheck, knip, 3,605 unit
tests, 66 end-to-end tests, runtime smoke, and tarball inspection. Real Gradle
autolinking regeneration and CMake launcher repair were verified. Native bare
Android and bare/Expo iOS workflow checks passed, as did the bare iOS cache suite.

Omitted before the version commit: the remaining native cache matrix, Expo Android
workflow, and manual Release-artifact checks. Final candidate build, version,
help, guide, and all five tarball inspections are retained, together with blocking
CI on the exact release commit, including Node 22, Node 24, and the Node 20.19.4
published-runtime job.

v1.0.0-rc.17

v1.0.0-rc.17 Pre-release
Pre-release

Choose a tag to compare

@janicduplessis janicduplessis released this 06 Sep 04:52

If Stim is not installed globally, replace stim below with npx stim-cli.

Fixes

  • Android builds disable CMake precompiled headers by default when Stim supplies ccache, improving compiler-cache reuse across worktrees. Explicit project PCH settings are preserved; builds without Stim's ccache setup and iOS builds are unchanged. The tradeoff is slower cold C++ compilation. (9418d3d)
  • The repository's benchmark harness flags missing or below-target Android compiler-cache evidence, retains failed attempts for investigation, and excludes them from published comparisons. Android preparation and preflight also require a doctor report without cost findings. (872bb1f)

Docs

  • stim guide agent keeps the workflow, safety rules, and recovery actions up front. Optional cache warm-up, ABI selection, fingerprint fallback, and build-sharing details live in the build and concurrency guides. (1c420aa)

QA

Expedited RC authorized on 2026-09-06. Omitted locally before the version commit: format:check, lint, typecheck, knip, unit tests, test:e2e, test:runtime, and the pre-tag native/manual matrix. Retained before the version commit: candidate build, CLI version/help/guide, and tarball inspection. Retained after push: exact-release-commit CI, including its format, lint, build, typecheck, knip, unit, cross-platform e2e, and published-runtime jobs.

v1.0.0-rc.16

v1.0.0-rc.16 Pre-release
Pre-release

Choose a tag to compare

@janicduplessis janicduplessis released this 05 Sep 17:46

If Stim is not installed globally, replace stim below with npx stim-cli.

New

  • stim doctor reports the running CLI version, the first stim executable resolved from PATH, and every distinct Stim installation found on PATH. It flags the setup when the resolved executable is older than the CLI currently running. (0070bae)

Fixes

  • The benchmark harness accepts ABI-scoped Android APK cache keys when validating a native-change run. (93bfeb1)
  • Benchmark run guards reject the wrong Stim version inside the timed shell, enforce inactivity and hard timeouts across process trees, and preserve failures hidden inside shell chains. (e3410c2)

Docs

  • The release guide defines an explicitly authorized expedited lane for release candidates, including the checks it may omit and the package, CI, tagging, and publishing safeguards it must retain. (5da0e95)

QA

Expedited RC authorized on 2026-09-05. Omitted locally before the version commit: format:check, lint, typecheck, knip, unit tests, test:e2e, test:runtime, and the pre-tag native/manual matrix. Retained before the version commit: candidate build, CLI version/help/guide, and tarball inspection. Retained after push: exact-release-commit CI, including its format, lint, build, typecheck, knip, unit, cross-platform e2e, and published-runtime jobs.

v1.0.0-rc.15

v1.0.0-rc.15 Pre-release
Pre-release

Choose a tag to compare

@janicduplessis janicduplessis released this 05 Sep 14:50

If Stim is not installed globally, replace stim below with npx stim-cli.

New

  • stim worktree warm copies missing ignored dependencies, native output, and local configuration from the main checkout into an existing linked worktree. Existing entries and tracked files are preserved. (6412169)
  • stim reload [ios|android] reloads JavaScript on a running owned simulator or emulator without rebuilding or reinstalling the app. It reports the requested reload, selected device, Metro port, and strategy; app-side completion still needs verification. (43da17e, 24d6d71)
  • Sectioned guide topics support stim guide <topic> <section>, including direct error-code lookup such as stim guide errors STIM_NO_METRO. (d377e92)
  • Owned Android emulators use Quick Boot where supported. Shutdown waits for the emulator and snapshot save to finish, and uncertain process locks prevent deletion. Displayless Linux keeps snapshots disabled. (e6ddc3a)

Removed (breaking)

  • worktree create, --carry-ignored, and creation-only settings are removed. Use Git to create worktrees, then run stim worktree warm when you need ignored files from main. Tracked edits are no longer copied. (834b338)

Fixes

  • Warming preserves APFS clones through file publication on macOS, avoiding full data copies while keeping existing files safe. Files remain independent of the main checkout. (0a5c2fa)
  • Benchmark overview links open the selected platform's audit, including Luna's Android JavaScript result. (5d3aced)
  • Android shutdown flushes guest writes before killing the emulator, with a five-second limit so a stalled flush cannot block cleanup. (3abbb87)
  • iOS skips cache lookup and storage when the final fingerprint cannot be computed, preventing an artifact from being stored under its earlier key. (74d9a3e)
  • Commands waiting for a native build keep waiting when another process takes over a failed builder's lock. (70f3108)
  • Android Debug builds target the selected device's ABI and route eligible CMake compilation through ccache. (0e5eb6d, b9743cd)
  • start, ios, and android reject directories that are not React Native or Expo apps; doctor reports the problem as a finding. Invalid relative registry paths are reported as invalid records, and worktree Git commands pass paths as arguments. (360d871, c93997f, b7100dd)

Docs

  • Native cache QA uses a normally built disposable source checkout and separate empty test caches. (8865207)

  • The agent workflow verifies UI changes on the reported device and checks logs again before cleanup. (0dff4a2)

  • Error-guide headings match emitted messages, and shared-lock guidance covers the records those locks protect. (8576b5e)

  • Setup, platform requirements, device ownership, and reload guidance now agree across the CLI and website. A successful log query is distinguished from a clean log result. (b264ffa, 0ab7174, cc34d57)

  • The skill description names common agent tasks while retaining its single version-matched guide command. (82e7ac9)

  • The benchmark website has separate platform/model selectors, visible unavailable combinations, and published Android results. (ebe5359, 9c54814, 8fde8cc)

Migration notes

stim worktree create and --carry-ignored are removed. Create the checkout with Git, then warm it from inside the new directory:

git worktree add -b my-feature ../my-feature HEAD
cd ../my-feature
stim worktree warm

If an agent harness already created the worktree, run only stim worktree warm. Warming never applies the main checkout's tracked edits. Remove worktreeDir, worktree.baseRef, worktree.include, and .worktreeinclude from project setup; worktree.exclude and .worktreeexclude still control warming. stim worktree remove works with warmed and unwarmed worktrees and retains Git-created branches.

stim guide errors, lifecycle, facts, and cleanup now print a section index. Add the section name to read its full guidance. The agent, Metro, logs, and settings topics remain whole. (d377e92)

The website build retains two accepted high-severity image-size denial-of-service advisories: GHSA-5p2g-fcmc-qvqq and GHSA-w3rx-r6r6-pgpr. A malformed local image can hang a website build. The audit exceptions do not fix the parser; published Stim packages do not depend on it. Docusaurus tracks a replacement in #12231.

The remaining native-device validation continues after this candidate is published.