fix(sentry): Rust source context + per-release deploy marker (#405)#1067
Conversation
…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).
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughCI now computes and exports a 12‑character short SHA and uses Changes
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
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Review rate limit: 4/5 reviews remaining, refill in 12 minutes. Comment |
There was a problem hiding this comment.
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
⛔ Files ignored due to path filters (2)
Cargo.lockis excluded by!**/*.lockapp/src-tauri/Cargo.lockis excluded by!**/*.lock
📒 Files selected for processing (6)
.github/workflows/release.ymlCargo.tomlapp/src-tauri/Cargo.tomldocs/sentry.mdscripts/ci-secrets.example.jsonscripts/upload_sentry_symbols.sh
…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.
There was a problem hiding this comment.
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
📒 Files selected for processing (1)
.github/workflows/release-staging.yml
…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.
There was a problem hiding this comment.
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
📒 Files selected for processing (2)
.github/workflows/release-staging.yml.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.
* 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>
Summary
Five small additive changes that finish the source-context work for #405 on top of #1032's per-surface project split:
debug-imagesfeature on thesentrycrate (both manifests) so events arrive withdebug_meta.imagespopulated 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 forsentry-cli upload-dif --include-sourcesto ship.short_sha(12 chars) used in allSENTRY_RELEASEconstructions so uploaded artifacts attach to the same release the running binaries report. Runtime code inconfig.ts,vite.config.ts,main.rs, andapp/src-tauri/src/lib.rsalready truncates to 12; CI was passing the full 40 — different release, no symbolication.Record Sentry deploy markerstep inrelease.yml(closes [Observability] Configure Sentry release tracking and source maps #405's "release page links commits → deploys" criterion). Kept out ofupload_sentry_symbols.shbecause the script may be invoked multiple times in a release lifecycle andsentry-cli releases deploys ... newdoes not dedupe by (release, env).--log-level=warn(sentry-cli 3.x compat); the full wordwarningis rejected on 3.x and the script silently skipped uploads.Plus housekeeping:
scripts/ci-secrets.example.jsonupdated to the per-surface varsrelease.ymlactually 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.mdadds 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 infeat/sentry-per-project-dsns(which itself was stale relative tomain), and the resulting branch was missing ~25 PRs of newer main work — its diff vsmainshowed legitimate Sentry additions tangled with unrelated rollbacks ofstarship-battery,iana-time-zone, the in-process core change, etc. Rather than untangle that on the old branch I built this one straight on currentorigin/mainand applied only the targeted Sentry changes. Diff is now 6 files, +192/−30 (plus lock file additions forfindshlibs+sentry-debug-images), all Sentry-scoped.Review feedback on #973 from @graycyrus and CodeRabbit is reflected here:
short_shaoutput above.docs/sentry.md.Submission Checklist
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.docs/sentry.mdis the longer narrative.cargo update -p sentryfor both manifests; only addsfindshlibs+sentry-debug-imagesentries (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, triggeredOPENHUMAN_TAURI_SENTRY_TEST=panic. The resulting event contained 485 images, matched the uploaded debug-id, and theopenhuman::run @ lib.rs:909frame 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
Documentation
Chores