Skip to content

fix(sentry): Rust source context + per-release deploy marker (#405)#1067

Merged
M3gA-Mind merged 4 commits intotinyhumansai:mainfrom
CodeGhost21:fix/405-sentry-followups
May 1, 2026
Merged

fix(sentry): Rust source context + per-release deploy marker (#405)#1067
M3gA-Mind merged 4 commits intotinyhumansai:mainfrom
CodeGhost21:fix/405-sentry-followups

Conversation

@CodeGhost21
Copy link
Copy Markdown
Contributor

@CodeGhost21 CodeGhost21 commented May 1, 2026

Summary

Five small additive changes that finish the source-context work for #405 on top of #1032's per-surface project split:

  • debug-images feature on the sentry crate (both manifests) so events arrive with debug_meta.images populated and the symbolicator can attach surrounding source lines to each frame.
  • [profile.release] debug = "line-tables-only" + split-debuginfo = "packed" so the binaries actually emit DWARF for sentry-cli upload-dif --include-sources to ship.
  • short_sha (12 chars) used in all SENTRY_RELEASE constructions so uploaded artifacts attach to the same release the running binaries report. Runtime code in config.ts, vite.config.ts, main.rs, and app/src-tauri/src/lib.rs already truncates to 12; CI was passing the full 40 — different release, no symbolication.
  • Dedicated Record Sentry deploy marker step in release.yml (closes [Observability] Configure Sentry release tracking and source maps #405's "release page links commits → deploys" criterion). Kept out of upload_sentry_symbols.sh because the script may be invoked multiple times in a release lifecycle and sentry-cli releases deploys ... new does not dedupe by (release, env).
  • --log-level=warn (sentry-cli 3.x compat); the full word warning is rejected on 3.x and the script silently skipped uploads.

Plus housekeeping:

  • scripts/ci-secrets.example.json updated to the per-surface vars release.yml actually reads now (SENTRY_PROJECT_REACT/CORE/TAURI, OPENHUMAN_REACT/CORE/TAURI_SENTRY_DSN). Legacy keys (no longer read since feat(sentry): split errors into per-surface projects (react, core, tauri) #1032) removed.
  • docs/sentry.md adds the Rust source-context section, refreshes the required-vars table, and adds troubleshooting entries for the new failure modes.

Why a fresh PR

Supersedes #973. That branch was forked from a much older main; mid-review I tried to bring it up to date by merging in feat/sentry-per-project-dsns (which itself was stale relative to main), and the resulting branch was missing ~25 PRs of newer main work — its diff vs main showed legitimate Sentry additions tangled with unrelated rollbacks of starship-battery, iana-time-zone, the in-process core change, etc. Rather than untangle that on the old branch I built this one straight on current origin/main and applied only the targeted Sentry changes. Diff is now 6 files, +192/−30 (plus lock file additions for findshlibs + sentry-debug-images), all Sentry-scoped.

Review feedback on #973 from @graycyrus and CodeRabbit is reflected here:

  • CodeRabbit (release.yml SHA truncation, critical) — addressed via the short_sha output above.
  • graycyrus (deploy marker fires per upload, major) — moved to its own step that fires once per matrix target. The misleading "idempotent" claim in the script and docs is corrected.
  • graycyrus (duplicate DSN keys in ci-secrets.example.json, major) — legacy keys removed; only the per-surface set remains, with a deprecation note in docs/sentry.md.

Submission Checklist

  • N/A unit tests — feature flag changes + workflow YAML; nothing with logic to unit-test. Smoke trigger (OPENHUMAN_TAURI_SENTRY_TEST=panic) still exists from feat(sentry): split errors into per-surface projects (react, core, tauri) #1032 for end-to-end verification.
  • Doc comments — every new env var, profile setting, and workflow step has an explaining block, and docs/sentry.md is the longer narrative.
  • Cargo.lock — regenerated via cargo update -p sentry for both manifests; only adds findshlibs + sentry-debug-images entries (and their transitive deps in the Tauri shell lock).

Verification

End-to-end Sentry source rendering was verified locally on the predecessor branch (#973's 17d700f5): rebuilt Tauri shell, uploaded .dSYM + sources, triggered OPENHUMAN_TAURI_SENTRY_TEST=panic. The resulting event contained 485 images, matched the uploaded debug-id, and the openhuman::run @ lib.rs:909 frame rendered 5 lines of pre/post context around the panic call. Re-verifying on this branch will require a CI release run since the changes are 99% identical.

Closes #405.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Use short (12-char) commit IDs in release tags for consistent crash grouping.
    • Record a single Sentry deploy marker per release, setting environment to staging or production.
  • Documentation

    • Expanded Sentry setup, per-surface release guidance, env var updates, and runbook for symbol/source troubleshooting.
  • Chores

    • Upload per-target debug symbols to improve desktop symbolication.
    • Enable Sentry debug-images, adjust release build debug info, and update CI examples/scripts and upload log-level.

…ansai#405)

Five small additive changes that finish the source-context work for tinyhumansai#405
on top of tinyhumansai#1032's per-surface project split.

1. **`debug-images` feature enabled** in the `sentry` crate for both the
   core (`Cargo.toml`) and the Tauri shell (`app/src-tauri/Cargo.toml`).
   Registers `DebugImagesIntegration` in the default integration set, so
   events arrive with `debug_meta.images` populated and Sentry's
   symbolicator can match the uploaded DIFs to attach `pre_context` /
   `context_line` / `post_context` to each frame. Without this, panics
   render with bare `function_name + 0xNNN` even when DIFs uploaded
   successfully.
2. **`[profile.release]` set to emit DWARF** in both Cargo manifests:
   `debug = "line-tables-only"` (file+line tables, no full type info)
   and `split-debuginfo = "packed"` (writes a `.dSYM` bundle on macOS so
   the shipped binary stays slim). Cargo's default `debug = false` for
   release left binaries with no DWARF at all — `sentry-cli upload-dif
   --include-sources` (already on main from tinyhumansai#1032) had nothing to ship.
3. **`SENTRY_RELEASE` aligned with runtime truncation.** `config.ts`,
   `vite.config.ts`, `main.rs`, and `app/src-tauri/src/lib.rs` all slice
   `VITE_BUILD_SHA` / `OPENHUMAN_BUILD_SHA` to 12 chars when computing
   the release tag at runtime, but `release.yml` was passing the full
   40-char SHA into `SENTRY_RELEASE` for both the Vite build and the
   symbols-upload step. The Vite plugin and `sentry-cli` use
   `SENTRY_RELEASE` raw, so artifacts attached to
   `openhuman@<v>+<40char>` while events emitted
   `openhuman@<v>+<12char>` — different releases, no symbolication.
   Added a `short_sha` output to `prepare-build` (sliced to 12 chars in
   the resolve step) and use it in both `SENTRY_RELEASE`
   constructions.
4. **Per-release Sentry deploy marker.** New `Record Sentry deploy
   marker` step in `release.yml` that runs once per matrix target after
   the upload step, calling `sentry-cli releases deploys ... new` with
   `SENTRY_ENVIRONMENT` derived from `inputs.build_target`. Closes
   tinyhumansai#405's "release page links commits → deploys" criterion. Kept out of
   `upload_sentry_symbols.sh` to avoid duplicate markers when the
   script is invoked multiple times in a release lifecycle —
   `sentry-cli releases deploys new` does NOT deduplicate by
   (release, env), so re-running CI for the same release adds a new row
   each time.
5. **`sentry-cli 3.x` log-level compat.** Changed
   `--log-level=warning` to `--log-level=warn` in
   `upload_sentry_symbols.sh`. The full word was rejected as
   `invalid value '...' for '--log-level'` on 3.x and the script
   silently skipped uploads (logged "Some debug symbols may have failed
   to upload" but no DIFs were actually pushed).

Plus housekeeping:
- `scripts/ci-secrets.example.json` updated to the per-surface vars
  `release.yml` actually reads now (`SENTRY_PROJECT_REACT/CORE/TAURI`,
  `OPENHUMAN_REACT/CORE/TAURI_SENTRY_DSN`). Legacy
  `OPENHUMAN_SENTRY_DSN` / `VITE_SENTRY_DSN` /
  `SENTRY_PROJECT(_FRONTEND)` keys removed (no longer read since tinyhumansai#1032).
- `docs/sentry.md` rewrites the surface list, adds a Rust source-context
  section explaining `debug-images` + the DWARF profile + the upload
  lifecycle, updates the required-vars table to the per-surface set, and
  adds troubleshooting entries for the new failure modes.

Cargo.lock files intentionally not modified — the new `debug-images`
feature pulls `findshlibs` transitively, which cargo will resolve into
the lock files on the first build. CI's `cargo build` regenerates them
in place.

Closes tinyhumansai#405. Supersedes tinyhumansai#973 (which was rebased through merging a stale
branch and ended up with diff noise unrelated to the actual fix).
@CodeGhost21 CodeGhost21 requested a review from a team May 1, 2026 09:47
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 1, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 88ba39f1-5fe0-400b-953e-6f4b55068d88

📥 Commits

Reviewing files that changed from the base of the PR and between 8e54823 and 09af778.

📒 Files selected for processing (1)
  • .github/workflows/release.yml

📝 Walkthrough

Walkthrough

CI now computes and exports a 12‑character short SHA and uses openhuman@<version>+<short_sha> for Sentry releases; Rust crates enable the sentry debug-images feature and packed split debug info; CI uploads per-target Rust debug artifacts with sentry-cli and records a Sentry deploy marker; docs and CI secret examples updated.

Changes

Cohort / File(s) Summary
Release workflows
.github/workflows/release.yml, .github/workflows/release-staging.yml
Compute/export 12‑char short_sha from resolved SHA; switch SENTRY_RELEASE to openhuman@<version>+<short_sha>; inject Sentry envs into build steps; add record-sentry-deploy job and symbol-upload matrix.
Cargo manifests
Cargo.toml, app/src-tauri/Cargo.toml
Enable sentry crate debug-images feature; add [profile.release] with debug = "line-tables-only" and split-debuginfo = "packed".
Docs
docs/sentry.md
Document three-surface Sentry tracking, short‑SHA release format, Rust symbol pipeline (sentry-cli upload-dif --include-sources), CI env var changes, and troubleshooting/runbook.
CI secrets example
scripts/ci-secrets.example.json
Add SENTRY_AUTH_TOKEN, SENTRY_ORG, SENTRY_PROJECT_REACT/CORE/TAURI, and per-surface DSN vars.
Symbol upload script
scripts/upload_sentry_symbols.sh
Change sentry-cli flag from --log-level=warning to --log-level=warn for sentry-cli 3.x compatibility.
Other CI wiring
...
Matrix uploads Rust debug artifacts per target (Tauri/core), maps build_targetSENTRY_ENVIRONMENT (staging vs production), and uses short_sha for all Sentry publish/upload/deploy steps.

Sequence Diagram(s)

sequenceDiagram
    participant CI as CI Workflow
    participant Build as Build Runner / Matrix
    participant SentryCLI as sentry-cli
    participant SentryAPI as Sentry API

    CI->>Build: prepare-build (resolve sha → compute short_sha) & start matrix
    Build->>Build: produce artifacts (frontend bundles, Tauri app, split debug info)
    loop per desktop/core target
        Build->>SentryCLI: upload-dif (debug artifacts + .src.zip, --include-sources, SENTRY_RELEASE=openhuman@version+short_sha)
        SentryCLI->>SentryAPI: POST /projects/{org}/{project}/files/
        SentryAPI-->>SentryCLI: 200 OK
    end
    CI->>SentryCLI: releases deploys new (openhuman@version+short_sha, SENTRY_ENVIRONMENT)
    SentryCLI->>SentryAPI: POST /organizations/{org}/releases/.../deploys/
    SentryAPI-->>SentryCLI: 200 OK
    Build-->>CI: build + upload complete
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • senamakel

Poem

🐰 I hopped through CI and fetched a twelve‑char key,
I packed the debug crumbs and zipped each tree,
I nudged the deploy marker to mark the run,
Now traces match commits — a rabbit's done. 🥕

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main changes: Rust source context support via debug-images feature and per-release deploy marker recording in Sentry configuration.
Linked Issues check ✅ Passed The PR fully addresses issue #405 objectives: enables debug-images for source context, emits DWARF in releases, uses consistent short_sha in SENTRY_RELEASE, adds dedicated deploy marker job, validates CI environment variables, updates documentation, and implements safeguards.
Out of Scope Changes check ✅ Passed All changes directly support Sentry release tracking and source context goals: manifest updates for debug features, CI workflow adjustments for release naming and deploy markers, documentation updates, example config updates, and symbol upload script compatibility fix are all in scope.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Review rate limit: 4/5 reviews remaining, refill in 12 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/release.yml:
- Around line 565-588: The "Record Sentry deploy marker" step currently swallows
failures because the sentry-cli command is followed by `|| { echo "[WARN] ...";
}`; remove that fallback so failures surface (rely on the existing set -euo
pipefail). Specifically, edit the step containing the sentry-cli call (the block
referencing SENTRY_RELEASE and SENTRY_ENVIRONMENT) and delete the trailing `|| {
echo "[WARN] deploy marker failed (non-fatal)"; }` so that `sentry-cli releases
deploys "${SENTRY_RELEASE}" new -e "${SENTRY_ENVIRONMENT}"` can fail the job on
auth/org/release errors.

In `@scripts/ci-secrets.example.json`:
- Around line 26-28: The template and runtime disagree on the Sentry env var:
the template defines OPENHUMAN_CORE_SENTRY_DSN while the runtime still reads
OPENHUMAN_SENTRY_DSN; update the runtime code that reads the Sentry DSN (where
OPENHUMAN_SENTRY_DSN is referenced) to read OPENHUMAN_CORE_SENTRY_DSN instead
and add a fallback to the old OPENHUMAN_SENTRY_DSN for backward compatibility
(i.e., try OPENHUMAN_CORE_SENTRY_DSN first, then OPENHUMAN_SENTRY_DSN).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: b2f67d82-6a8f-48d4-a7fb-8d67da1ebc56

📥 Commits

Reviewing files that changed from the base of the PR and between 6ac7885 and 9a6e014.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • app/src-tauri/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (6)
  • .github/workflows/release.yml
  • Cargo.toml
  • app/src-tauri/Cargo.toml
  • docs/sentry.md
  • scripts/ci-secrets.example.json
  • scripts/upload_sentry_symbols.sh

Comment thread .github/workflows/release.yml Outdated
Comment thread scripts/ci-secrets.example.json
…yhumansai#405)

`release-staging.yml` (added in tinyhumansai#1066) was cutting staging desktop
bundles with **zero** Sentry instrumentation: no `environment:`
declaration on its jobs, no `VITE_SENTRY_DSN` / `OPENHUMAN_TAURI_SENTRY_DSN`
threaded into the Tauri build step, no `SENTRY_AUTH_TOKEN` for source-map
upload, and no symbol-upload / deploy-marker steps. Net effect: the
staging build's `Sentry.init` short-circuits in
`app/src/services/analytics.ts` (`if (!SENTRY_DSN) return;`), and the
Rust core / Tauri shell `option_env!` lookups resolve to empty — so the
shipped staging app reports nothing to Sentry, ever.

This mirrors the existing wiring on `release.yml`'s build-desktop path:

- Both `prepare-build` and `build-desktop` declare `environment:
  Production` so the same `vars.OPENHUMAN_REACT_SENTRY_DSN` /
  `OPENHUMAN_TAURI_SENTRY_DSN` / `SENTRY_PROJECT_REACT/CORE` /
  `SENTRY_ORG` and `secrets.SENTRY_AUTH_TOKEN` already provisioned for
  production resolve here. Staging builds tag events with
  `environment: staging` at runtime (set by `APP_ENVIRONMENT` in
  `config.ts` and `resolve_sentry_environment()` in the Rust shell), so
  Sentry can filter them without separate projects.
- `prepare-build` exposes a `short_sha` output (first 12 chars of `sha`)
  for the canonical release tag. Matches the runtime truncation in
  `config.ts` / `vite.config.ts` / `main.rs` / `app/src-tauri/src/lib.rs`
  so uploaded source maps + DIFs attach to the same release events
  emit.
- `Build and package Tauri app` step now passes `VITE_SENTRY_DSN`,
  `OPENHUMAN_TAURI_SENTRY_DSN`, `OPENHUMAN_BUILD_SHA`, `VITE_BUILD_SHA`,
  `SENTRY_RELEASE` (with `short_sha`), `SENTRY_AUTH_TOKEN`,
  `SENTRY_ORG`, `SENTRY_PROJECT` so `@sentry/vite-plugin` can upload
  source maps for `openhuman-react` and the Tauri shell binary has its
  DSN baked in.
- New `Upload core sidecar debug symbols to Sentry` step reads from
  `app/src-tauri/target/<triple>/debug/deps` (not `release/deps` as on
  production) since staging builds with `--debug`.
- New `Record Sentry deploy marker` step fires once per matrix target
  with `SENTRY_ENVIRONMENT=staging`, satisfying the same release-page
  link as production.

Closes the staging half of tinyhumansai#405's "every production/staging event
includes a valid release and environment" criterion.
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/release-staging.yml:
- Around line 375-396: The "Record Sentry deploy marker" step currently runs
inside the build-desktop matrix and creates one deploy per matrix target; move
this logic into a single follow-up job instead of inside the matrix so only one
deploy marker is recorded. Create a new job (e.g., record-sentry-deploy) that
needs the build-desktop job, copies the same env usage for SENTRY_AUTH_TOKEN,
SENTRY_ORG, SENTRY_PROJECT, SENTRY_RELEASE and SENTRY_ENVIRONMENT, and runs the
same sentry-cli command; remove the step from the build-desktop job so
SENTRY_RELEASE is only reported once for the whole workflow. Ensure the new job
consumes the same outputs (needs.prepare-build.outputs.version and .short_sha)
used to construct SENTRY_RELEASE.
- Around line 357-367: The workflow only uploads symbols from deps_dir
("app/src-tauri/target/${MATRIX_TARGET}/debug/deps") so standalone/staged core
artifacts built under the root Rust target directory are missed; add a second
check for the root target debug directory (e.g.,
"target/${MATRIX_TARGET}/debug") and, when present, invoke the same upload
script (bash scripts/upload_sentry_symbols.sh "$VERSION" "<root_dir>") to upload
its DIFs as well (mirror the existing if [ -d "$deps_dir" ] handling but for the
root debug dir) so symbols for the standalone core binary are included.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 73cdbfa4-2ef6-4595-87ed-4bb45b3e6d0b

📥 Commits

Reviewing files that changed from the base of the PR and between 9a6e014 and e4b9a04.

📒 Files selected for processing (1)
  • .github/workflows/release-staging.yml

Comment thread .github/workflows/release-staging.yml Outdated
Comment thread .github/workflows/release-staging.yml Outdated
…er, no error swallowing

Three fixes from CodeRabbit's review on tinyhumansai#1067:

1. **Deploy marker fires once per release, not once per matrix target.**
   The "Record Sentry deploy marker" step lived inside `build-desktop`
   in both workflows, so the matrix (3 platforms on prod, 4 on staging)
   produced 3-4 deploy rows per release instead of 1.
   `sentry-cli releases deploys ... new` does NOT deduplicate by
   (release, env), so each call really did add a new row. Moved the
   marker into a dedicated `record-sentry-deploy` job that
   `needs: [prepare-build, build-desktop]` and runs on a single
   `ubuntu-latest` runner — exactly one row per release.
2. **Stopped swallowing deploy-marker failures.** Both workflows had a
   trailing `|| { echo "[WARN] deploy marker failed (non-fatal)"; }`
   that turned auth/org/release misconfig into a silent green build —
   exactly the "fail clearly on misconfig" anti-pattern tinyhumansai#405's
   acceptance criteria warn against. With `set -euo pipefail` the
   sentry-cli call now fails the job loudly.
3. **release-staging.yml also uploads root target's DIFs.** Staging
   builds both the Tauri shell (`app/src-tauri/target/<triple>/debug`)
   AND a standalone `openhuman-core` CLI binary
   (`target/<triple>/debug`) that's published as a separate artifact
   for operators. The upload step previously only scanned the shell's
   target dir, so crashes from the standalone CLI couldn't symbolicate.
   Now loops over both. Symbols are debug-ID-keyed so upload from both
   binaries to the same Sentry project doesn't collide.

The fourth review comment (template `OPENHUMAN_CORE_SENTRY_DSN` vs
runtime `OPENHUMAN_SENTRY_DSN`) is correct as a runtime/template gap
in isolation, but `release.yml:484` already aliases
`OPENHUMAN_SENTRY_DSN: ${{ vars.OPENHUMAN_CORE_SENTRY_DSN }}` — the
template lists GH Actions var names (matching workflow consumption),
not runtime env var names, so the existing template is correct for its
purpose. Replied on the comment.
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/release-staging.yml:
- Around line 25-30: The workflow is using the Production GitHub Actions
environment (environment: Production) which exposes production-scoped secrets to
staging runs; change the environment value to a dedicated non-prod environment
(e.g., environment: Staging) for this job and update every other job in the same
workflow that currently uses "Production" to use that Staging environment
instead, and ensure the Staging Actions environment in your repo defines/mirrors
the required non-prod secrets (SENTRY_* and VITE_DEBUG) so jobs like the one
referencing environment: Production now reference environment: Staging without
losing required variables.

In @.github/workflows/release.yml:
- Around line 697-728: The record-sentry-deploy job currently runs after
build-desktop and can run while later publish steps still fail, causing stray
Sentry deploy markers; update the job's dependencies so it runs only after the
final publish step (attach it to the publish-release workflow job by
replacing/adding needs to include publish-release instead of build-desktop
and/or adding any publish jobs like publish-updater-manifest and build-docker to
needs), and keep the existing if condition
(needs.prepare-build.outputs.release_enabled == 'true') and env/steps intact so
the deploy marker is recorded only after publish-release completes successfully.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e23a254f-3cc0-49c7-8597-abf440a98ca9

📥 Commits

Reviewing files that changed from the base of the PR and between e4b9a04 and 8e54823.

📒 Files selected for processing (2)
  • .github/workflows/release-staging.yml
  • .github/workflows/release.yml

Comment thread .github/workflows/release-staging.yml
Comment thread .github/workflows/release.yml
…sktop

CodeRabbit caught a real ordering bug on tinyhumansai#1067: the `record-sentry-deploy`
job depended on `build-desktop` directly, so it could run before
`build-docker` / `publish-updater-manifest` finished. If one of those
later phases failed, `cleanup-failed-release` would delete the GitHub
release/tag, but Sentry would already have a deploy row for a release
that never shipped.

Hang off `publish-release` instead. That job already requires the full
matrix + docker + updater manifest to succeed, so the deploy marker
transitively waits for all of them and only fires once the release is
actually published.

`record-sentry-deploy` is unchanged on `release-staging.yml` because that
workflow has no `publish-release` equivalent — its only build phase is
`build-desktop`, so the existing `needs: [prepare-build, build-desktop]`
is already correct.
@M3gA-Mind M3gA-Mind merged commit cd7a565 into tinyhumansai:main May 1, 2026
15 checks passed
jwalin-shah added a commit to jwalin-shah/openhuman that referenced this pull request May 5, 2026
* feat(remotion): Ghosty character library with transparent MOV variants (tinyhumansai#1059)

Co-authored-by: WOZCODE <contact@withwoz.com>

* feat(composio/gmail): sync into memory tree (Slack-parity) (tinyhumansai#1056)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(scheduler-gate): throttle background AI on battery / busy CPU (tinyhumansai#1062)

* fix(core,cef): run core in-process and stop orphaning CEF helpers on Cmd+Q (tinyhumansai#1061)

* ci: add dedicated staging release workflow (tinyhumansai#1066)

* fix(sentry): Rust source context + per-release deploy marker (tinyhumansai#405) (tinyhumansai#1067)

* fix(welcome): re-enable OAuth buttons with focus/timeout recovery (tinyhumansai#1049) (tinyhumansai#1069)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(dependencies): update pnpm-lock.yaml and Cargo.lock for package… (tinyhumansai#1082)

* fix(onboarding): personalize welcome agent greeting with user identity (tinyhumansai#1078)

* fix(chat): make agent message bubbles fit content width (tinyhumansai#1083)

* Feat/dmg checks (tinyhumansai#1084)

* fix(linux): Add X11 platform flags to .deb package launcher (tinyhumansai#1087)

Co-authored-by: unn-Known1 <unn-known1@users.noreply.github.com>

* fix(sentry): auto-send React events; collapse core→tauri for desktop (tinyhumansai#1086)

Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>

* fix(cef): run blank reload guard on the CEF UI thread (tinyhumansai#1092)

* fix(app): reload webview instead of restart_app in dev mode (tinyhumansai#1068) (tinyhumansai#1071)

* fix(linux): deliver X11 ozone flags via custom .desktop template (tinyhumansai#1091)

* fix(webview-accounts): retry data-dir purge so CEF handle race doesn't leak cookies (tinyhumansai#1076) (tinyhumansai#1081)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>

* fix(webview/slack): media perms + deep-link isolation (tinyhumansai#1074) (tinyhumansai#1080)

Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>

* ci(release): split staging vs production workflows; promote staging tags (tinyhumansai#1094)

* Update release-staging.yml (tinyhumansai#1097)

* chore(staging): v0.53.5

* chore(staging): v0.53.6

* ci(staging): cut staging from main; add act local-debug helper (tinyhumansai#1099)

* chore(staging): v0.53.7

* fix(ci): correct sentry-cli download URL and trap scope (tinyhumansai#1100)

* chore(staging): v0.53.8

* feat(chat): forward thread_id to backend for KV cache locality (tinyhumansai#1095)

* fix(ci): bump pinned sentry-cli to 3.4.1 (2.34.2 was never published) (tinyhumansai#1102)

* chore(staging): v0.53.9

* fix(ci): drop bash trap in upload_sentry_symbols.sh; inline cleanup (tinyhumansai#1103)

* chore(staging): v0.53.10

* refactor(session): flatten session_raw/, switch md to YYYY_MM_DD (tinyhumansai#1098)

* Add full Composio managed-auth toolkit catalog (tinyhumansai#1093)

* ci: add diff-aware 80% coverage gate (Vitest + cargo-llvm-cov) (tinyhumansai#1104)

* feat(scripts): pnpm work + pnpm debug for agent-driven workflows (tinyhumansai#1105)

* ci: pull pnpm into CI image, drop redundant setup steps (tinyhumansai#1107)

* docs: add Cursor Cloud specific instructions to AGENTS.md (tinyhumansai#1106)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>

* chore(staging): v0.53.11

* docs: surface 80% coverage gate and scripts/debug runners (tinyhumansai#1108)

* feat(app): show Composio integrations as sorted icon grid on Skills (tinyhumansai#1109)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>

* feat(composio): client-side trigger enable/disable toggles (tinyhumansai#1110)

* feat(skills): channels grid + integrations card polish; tolerant Composio trigger decode (tinyhumansai#1112)

* chore(staging): v0.53.12

* feat(home): early-bird banner + assistant→agent terminology (tinyhumansai#1113)

* feat(updater): in-app auto-update with auto-download + restart prompt (tinyhumansai#677) (tinyhumansai#1114)

* chore(claude): add ship-and-babysit slash command (tinyhumansai#1115)

* feat(home): EarlyBirdyBanner + agent terminology + LinkedIn enrichment model pin (tinyhumansai#1118)

* fix(chat): single onboarding thread in sidebar after wizard (tinyhumansai#1116)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Steven Enamakel <senamakel@users.noreply.github.com>

* fix: filter out global namespace from citation chips (tinyhumansai#1124)

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: senamakel-droid <281415773+senamakel-droid@users.noreply.github.com>

* feat(nav): enable Memory tab in BottomTabBar (tinyhumansai#1125)

* feat(memory): singleton ingestion + status RPC + UI pill (tinyhumansai#1126)

* feat(human): mascot tab with viseme-driven lipsync (staging only) (tinyhumansai#1127)

* Fix CEF zombie processes on full app close and restart (tinyhumansai#1128)

Co-authored-by: senamakel-droid <281415773+senamakel-droid@users.noreply.github.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>

* Update issue templates for GitHub issue types (tinyhumansai#1146)

* feat(human): expand mascot expressions and tighten reply-speech state machine (tinyhumansai#1147)

* feat(memory): ingestion pipeline + tree-architecture docs + ops/schemas split (tinyhumansai#1142)

* feat(threads): surface live subagent work in parent thread (tinyhumansai#1122) (tinyhumansai#1159)

* fix(human): keep mascot mouth animating when TTS ships no viseme data (tinyhumansai#1160)

* feat(composio): consume backend markdownFormatted for LLM output (tinyhumansai#1165)

* fix(subagent): lazy-register toolkit actions filtered out of fuzzy top-K (tinyhumansai#1162)

* feat(memory): user-facing long-term memory window preset (tinyhumansai#1137) (tinyhumansai#1161)

* fix(tauri-shell): proactively kill stale openhuman RPC on startup (tinyhumansai#1166)

* chore(staging): v0.53.13

* fix(composio): per-action tool consumes backend markdownFormatted (tinyhumansai#1167)

* fix(threads): persist selectedThreadId across reloads (tinyhumansai#1168)

* feat(memory_tree): switch embed model to bge-m3 (1024-dim, 8K context) (tinyhumansai#1174)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(agent): drop redundant [Memory context] recall injection (tinyhumansai#1173)

* chore(memory_tree): drop body-read timeouts on Ollama HTTP calls (tinyhumansai#1171)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(transcript): emit thread_id + fix orchestrator missing cost (tinyhumansai#1169)

* fix(composio/gmail): phase out html2md, prefer text/plain MIME part (tinyhumansai#1170)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(tools): markdown output for internal tool results (tinyhumansai#1172)

* feat(security): enforce prompt-injection guard before model and tool execution (tinyhumansai#1175)

* fix(cef): popup paint dies after first frame — skip blank-page guard for popups (tinyhumansai#1079) (tinyhumansai#1182)

Co-authored-by: Steven Enamakel <31011319+senamakel@users.noreply.github.com>

* chore(sentry): rename OPENHUMAN_SENTRY_DSN → OPENHUMAN_CORE_SENTRY_DSN (tinyhumansai#1186)

* feat(remotion): add yellow mascot character with all animation variants (tinyhumansai#1193)

Co-authored-by: Neel Mistry <neelmistry@Neels-MacBook-Pro.local>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(composio): hide raw connection ID, derive friendly label (tinyhumansai#1153) (tinyhumansai#1185)

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* fix(windows): align install.ps1 MSI with per-machine scope (tinyhumansai#913) (tinyhumansai#1187)

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(tauri): deterministic CEF teardown on full app close (tinyhumansai#1120) (tinyhumansai#1189)

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(composio): cap Gmail HTML body before strip (crash mitigation) (tinyhumansai#1191)

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(auth): stop stale chat threads after signup (tinyhumansai#1192)

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(sentry): staging-only "Trigger Sentry Test" button (tinyhumansai#1072) (tinyhumansai#1183)

* chore(staging): v0.53.14

* chore(staging): v0.53.15

* feat(composio): format trigger slugs into human-readable labels (tinyhumansai#1129) (tinyhumansai#1179)

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* fix(ui): hide unsupported permission UI on non-macOS for Screen Intelligence (tinyhumansai#1194)

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(tauri-shell): retire embedded Gmail webview-account flow (tinyhumansai#1181)

* feat(onboarding): replace welcome-agent bot with react-joyride walkthrough (tinyhumansai#1180)

* chore(release): v0.53.16

* fix(threads): preserve selectedThreadId on cold-boot identity hydration (tinyhumansai#1196)

* feat(core): version/shutdown/update RPCs + mid-thread integration refresh (tinyhumansai#1195)

* fix(mascot): swap to yellow mascot via @remotion/player (tinyhumansai#1200)

* feat(memory_tree): cloud-default LLM, queue priority, entity filter, Memory tab UI (tinyhumansai#1198)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Persist turn state + restore conversation history on cold-boot (tinyhumansai#1202)

* feat(mascot): floating desktop mascot via native NSPanel + WKWebView (macOS) (tinyhumansai#1203)

* fix(memory/tree): emit summary children as Obsidian wikilinks (tinyhumansai#1210)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(tools): coding-harness baseline primitives (tinyhumansai#1205) (tinyhumansai#1208)

* docs: add Codex PR checklist for remote agents

---------

Co-authored-by: Steven Enamakel <31011319+senamakel@users.noreply.github.com>
Co-authored-by: WOZCODE <contact@withwoz.com>
Co-authored-by: sanil-23 <sanil@vezures.xyz>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Cyrus Gray <144336577+graycyrus@users.noreply.github.com>
Co-authored-by: CodeGhost21 <164498022+CodeGhost21@users.noreply.github.com>
Co-authored-by: oxoxDev <164490987+oxoxDev@users.noreply.github.com>
Co-authored-by: Mega Mind <146339422+M3gA-Mind@users.noreply.github.com>
Co-authored-by: Gaurang Patel <ptelgm.yt@gmail.com>
Co-authored-by: unn-Known1 <unn-known1@users.noreply.github.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Steven Enamakel <senamakel@users.noreply.github.com>
Co-authored-by: Steven Enamakel's Droid <enamakel.agent@tinyhumans.ai>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: senamakel-droid <281415773+senamakel-droid@users.noreply.github.com>
Co-authored-by: YellowSnnowmann <167776381+YellowSnnowmann@users.noreply.github.com>
Co-authored-by: Neil <neil@maha.xyz>
Co-authored-by: Neel Mistry <neelmistry@Neels-MacBook-Pro.local>
Co-authored-by: obchain <167975049+obchain@users.noreply.github.com>
Co-authored-by: Jwalin Shah <jshah1331@gmail.com>
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.

[Observability] Configure Sentry release tracking and source maps

2 participants