Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ IgnitionRL
To author an environment from a blank TypeScript project, follow the first guide in [`docs/BUILD_YOUR_FIRST_ENVIRONMENT.md`](docs/BUILD_YOUR_FIRST_ENVIRONMENT.md).
To turn a stored learner checkpoint into an inference run and replay, follow [`docs/EXPORT_AND_REPLAY_TRAINED_POLICY.md`](docs/EXPORT_AND_REPLAY_TRAINED_POLICY.md).
To debug reward shaping with named terms and replay frames, follow [`docs/REWARD_DEBUGGING_GUIDE.md`](docs/REWARD_DEBUGGING_GUIDE.md).
To build the first unsigned macOS desktop alpha bundle, follow [`docs/MACOS_ALPHA_BUILD.md`](docs/MACOS_ALPHA_BUILD.md).

After cloning and installing dependencies, generate a local project with traces, metrics and JSON exports:

Expand Down
10 changes: 10 additions & 0 deletions apps/studio/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,16 @@ bun run --cwd apps/studio dev:desktop
bun run --cwd apps/studio build:desktop
```

The desktop build command currently produces an unsigned macOS `.app` bundle
for the private alpha:

```txt
apps/studio/src-tauri/target/release/bundle/macos/IgnitionRL Studio Alpha.app
```

DMG packaging, Developer ID signing and notarization are intentionally tracked
as release gaps until Apple credentials and a signing profile are configured.

Current panels:

- workspace summary;
Expand Down
2 changes: 1 addition & 1 deletion apps/studio/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"dev": "vite --host 127.0.0.1",
"build": "tsc -p tsconfig.json && vite build",
"dev:desktop": "tauri dev",
"build:desktop": "tauri build",
"build:desktop": "tauri build --bundles app --ci --no-sign",
"tauri": "tauri",
"typecheck": "tsc -p tsconfig.json && tsc -p tsconfig.typecheck.json",
"test": "bun test"
Expand Down
1 change: 0 additions & 1 deletion apps/studio/src-tauri/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -443,7 +443,6 @@ fn run_checkpoint_inference_path(
let trace_dir = run_dir.join("traces");
let episode_id = format!("{run_id}:episode:0");
let trace_path = trace_dir.join(format!("{}.json", sanitize_id(&episode_id)));
let trace_reference_path = relative_project_path(&root, &trace_path);
let observation = checkpoint_observation(&checkpoint_payload, 0.0);
let next_observation = checkpoint_observation(&checkpoint_payload, 1.0);
let action = checkpoint_action(&checkpoint_payload);
Expand Down
13 changes: 10 additions & 3 deletions apps/studio/src-tauri/tauri.conf.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
"productName": "IgnitionRL Studio",
"productName": "IgnitionRL Studio Alpha",
"version": "0.1.0",
"identifier": "ai.ignitionrl.studio",
"build": {
Expand All @@ -12,7 +12,7 @@
"app": {
"windows": [
{
"title": "IgnitionRL Studio",
"title": "IgnitionRL Studio Alpha",
"width": 1440,
"height": 960,
"minWidth": 1100,
Expand All @@ -27,7 +27,14 @@
},
"bundle": {
"active": true,
"targets": "all",
"targets": [
"app"
],
"publisher": "IgnitionAI",
"category": "DeveloperTool",
"shortDescription": "Desktop-first RL studio for TypeScript agent environments.",
"longDescription": "IgnitionRL Studio Alpha is a local-first desktop shell for opening IgnitionRL projects, inspecting runs, debugging reward terms, replaying episodes and testing checkpoint inference workflows.",
"copyright": "Copyright 2026 IgnitionAI",
"icon": [
"icons/32x32.png",
"icons/128x128.png",
Expand Down
104 changes: 104 additions & 0 deletions docs/MACOS_ALPHA_BUILD.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# macOS Alpha Build

This document defines the first reproducible macOS desktop alpha build path for
IgnitionRL Studio.

The alpha target is an unsigned Tauri `.app` bundle. DMG packaging, Developer ID
signing and notarization are listed as explicit gaps below.

## Local Build Command

From the repository root:

```sh
bun install --frozen-lockfile
bun run build:studio:desktop
```

The root script delegates to:

```sh
bun run --cwd apps/studio build:desktop
```

The app-level script runs:

```sh
tauri build --bundles app --ci --no-sign
```

That command builds the React/Vite frontend, compiles the Tauri shell in release
mode and bundles a macOS `.app` without invoking DMG creation or code signing.

## Artifact Path

The local alpha artifact is:

```txt
apps/studio/src-tauri/target/release/bundle/macos/IgnitionRL Studio Alpha.app
```

The release binary is also built at:

```txt
apps/studio/src-tauri/target/release/ignitionrl-studio
```

## Alpha Bundle Metadata

Current Tauri alpha metadata:

- product name: `IgnitionRL Studio Alpha`;
- window title: `IgnitionRL Studio Alpha`;
- bundle identifier: `ai.ignitionrl.studio`;
- version: `0.1.0`;
- publisher: `IgnitionAI`;
- category: `DeveloperTool`;
- icons: `32x32.png`, `128x128.png`, `128x128@2x.png`, `icon.icns`, `icon.ico`.

The version stays numeric because macOS bundle metadata expects a standard
release version string. The alpha status is expressed in the product name and
release documentation.

## Verified Locally

The alpha build command was verified on macOS with:

```sh
bun run --cwd apps/studio tauri build --bundles app --ci --no-sign
```

Observed output included:

```txt
Finished 1 bundle at:
apps/studio/src-tauri/target/release/bundle/macos/IgnitionRL Studio Alpha.app
```

## Known Gaps

| Gap | Current status | Required before public distribution |
| --- | --- | --- |
| Developer ID signing | Disabled with `--no-sign`. | Configure Apple Developer Team ID, signing identity and CI secrets. |
| Notarization | Not configured. | Add Apple notarization credentials and staple notarization tickets. |
| DMG packaging | `tauri build` with DMG currently fails in the local headless environment during `bundle_dmg.sh`. | Re-enable and verify `tauri build --bundles dmg` on a signed macOS release runner. |
| Universal binary | Current local artifact is architecture-specific. | Install both Apple targets and build with `--target universal-apple-darwin`. |
| CI artifact upload | Not enabled. | Add a macOS GitHub Actions release job that uploads `.app` or signed `.dmg` artifacts. |
| Icon finalization | Bundle icons are configured and present. | Replace placeholder/early alpha artwork before external release if branding changes. |

## CI Recommendation

Do not add this build to every PR yet. The current PR CI runs on Ubuntu and
already validates the TypeScript, Rust workspace, frontend build and smoke
projects. A macOS bundle job should be added as a manual or release-only
workflow when signing/notarization secrets exist.

Recommended future command for that job:

```sh
bun install --frozen-lockfile
bun run --cwd apps/studio tauri build --bundles app --ci
```

Once signing is configured, remove `--no-sign` from the release job. Once DMG is
stable, switch the release job to `--bundles dmg` or build both `app` and `dmg`.
Loading