Skip to content

Promote main → release (conflict-resolved) - #5256

Merged
M3gA-Mind merged 112 commits into
tinyhumansai:releasefrom
M3gA-Mind:promote/main-to-release
Jul 28, 2026
Merged

Promote main → release (conflict-resolved)#5256
M3gA-Mind merged 112 commits into
tinyhumansai:releasefrom
M3gA-Mind:promote/main-to-release

Conversation

@M3gA-Mind

Copy link
Copy Markdown
Collaborator

Resolves the merge conflicts that failed the automated Promote main to release workflow (run 30405225559).

Brings 111 commits from main into release, while preserving all 5 commits release owns (the v0.63.6 / v0.63.7 / v0.63.8 cuts and the AppImage userns hotfix #5251).

Merge base was 2219d4207 (chore(release): v0.63.3). main was 111 ahead / 5 behind.

How each conflict was resolved

Version manifests — release's 0.63.8 (higher), main's content kept

Cargo.toml, app/src-tauri/Cargo.toml, app/package.json, app/src-tauri/tauri.conf.json

Release had just cut 0.63.8; main was on 0.63.5. Took 0.63.8. In all four files the version line was the only conflicted hunk — main's dependency and content edits auto-merged cleanly. Verified by diffing each merged file against main's side: version is the sole delta.

Cargo.toml — duplicate dependency key introduced by the merge

This one was not a pick-a-side; the naive merge produced a broken file.

Main migrated tinyhumans-sdk from a git dependency to the vendored vendor/tinyhumans-sdk submodule (ca47efe, with a .gitmodules entry). Release predates that migration and still declares tinyhumans-sdk = { git = ... }. The merge kept both, under the same [dependencies] table.

Verified this was a real break rather than a style question — parsing the un-deduped file gives:

TOMLDecodeError: Cannot overwrite a value (at line 79, column 86)

Cargo would have failed on every build. Dropped release's stale git line, kept main's vendored path dep. This is consistent with the staged submodule pointer and .gitmodules, both of which come from main.

Lockfiles — per-hunk, mirroring the manifests

Cargo.lock (2 hunks), app/src-tauri/Cargo.lock (3 hunks)

  • version hunks → 0.63.8, matching the manifests
  • tinyhumans-sdk source = "git+…" / reqwest 0.12.28 hunks → main's (a path dependency has no source line, and main's single-version reqwest naming is correct once the git dep is gone)

Not regenerated — the task forbids local cargo builds. Both files parse clean, contain zero residual 0.63.5 references and zero sdk-git-source references, and the openhuman package entry reads 0.63.8. CI is the validator here; if cargo wants to rewrite either lockfile the follow-up is a mechanical regeneration commit.

src/embed/mod.rs (add/add) — main's side

The two sides are byte-identical except two doc-comment lines: release's doctest imports openhuman::embed::Core, main's imports openhuman_core::embed::Core. [lib] name = "openhuman_core" on both sides, so release's path would fail the no_run doctest compile. There is no additive content to union here — only a same-line correctness difference — so main's is taken.

src/api/rest.rs — union (both hunks are main's additions)

Two hunks, both pure additions from main:

  1. the parse_api_response_value helper, which normalizes the backend envelope while preserving /auth/me's historical {success,user} shape
  2. its call site, Ok(value) => return parse_api_response_value(value)

They are one change and must land together. Release contributed nothing new in either hunk. Verified post-resolution that the function is both defined (L231) and called (L526).

src/openhuman/inference/local/service/lm_studio.rs — main's import list

Release additionally imports LmStudioChatCompletionRequest, LmStudioChatCompletionResponse, LmStudioChatMessage and model_ids.

A union would not compile. Those types exist only on release (defined in src/openhuman/inference/local/lm_studio.rs); the merged copy of that file is main's, so they are absent from the tree entirely. They are also referenced 0 times in the merged file body — main deleted the types and the code using them in the same change. Took main's import list, which matches exactly what the merged body uses.

AGENTS.md — main's section, plus release's rules carried forward

Both sides rewrite the same "backend SDK boundary" section. Main's is the newer, more detailed version documenting the vendored-submodule setup, consistent with the Cargo.toml resolution above, so it supersedes release's.

However main's rewrite drops a rule release states explicitly and main does not state anywhere (checked): no direct reqwest calls for TinyHumans JSON APIs, no duplicated SDK wire types. Rather than let a promotion silently delete a documented prohibition, I took main's section and appended that rule together with the admin/webhook prohibition as a short "Hard rules" block.

vendor/tinyagents — main's 3781540

⚠️ The one resolution that drops something. The pointers genuinely diverged from submodule merge-base ff76d76:

  • main 3781540 — 10+ commits release lacks (provider/embedding work: caller-supplied http clients, local embedding dimension discovery, authenticated-ollama credential handling)
  • release b6a4120 — 2 commits main lacks: be30296 fix(todos): serialize board deletion and b6a4120 docs(todos): describe raw board lifecycle

Set to main's, because main is the promotion source and the promoted core code compiles against main's tinyagents API surface; reverting to release's older pointer would very likely break the build.

Main already contains an equivalent of the docs commit. be30296 fix(todos): serialize board deletion is genuinely release-only and is not reachable from this pointer. OpenHuman does use that API (src/openhuman/tinyagents/todos.rs), so this wants a follow-up: merge the two tinyagents lines upstream and bump the submodule. Flagging rather than silently choosing.

Release commits preserved — verified

Release commit Status
220e1a041 v0.63.8 0.63.8 across all 4 manifests + both lockfiles
42cdf77e7 AppImage userns hotfix (#5251) ✅ auto-merged; userns handling present in both release scripts
14f5fd593 v0.63.7 ✅ subsumed by 0.63.8
9c1e2e657 v0.63.6 ✅ subsumed by 0.63.8
a40fbb79d Promote main → release (#5242) ✅ shared history

Other submodules audited — all now at main's pointers. vendor/tinycortex differed between branches but release's equals the merge base, so main's wins with nothing lost.

Validation

  • No conflict markers anywhere in the tree; no unmerged paths.
  • app/package.json and app/src-tauri/tauri.conf.json parse as valid JSON, both at 0.63.8.
  • Cargo.toml and app/src-tauri/Cargo.toml parse as valid TOML, both at 0.63.8 — this is what catches the duplicate-key issue above.
  • No builds or tests run locally, per the task constraint. CI is the gate, and the lockfiles in particular are unverified locally.

Notes for the merger

  • Merge parents are release first, main second, as a promotion should be.
  • Do not squash — this is a merge commit carrying main's history into release.
  • Follow-up: bump vendor/tinyagents to a commit that also contains be30296.

YellowSnnowmann and others added 30 commits July 21, 2026 19:01
…eature (tinyhumansai#5049) (tinyhumansai#5061)

Co-authored-by: Steven Enamakel <31011319+senamakel@users.noreply.github.com>
…ai#4786)

Co-authored-by: Sami Rusani <14844597+samrusani@users.noreply.github.com>
Co-authored-by: binyangzhu000-sudo <224954946+binyangzhu000-sudo@users.noreply.github.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
…nsai#5103)

Co-authored-by: Sami Rusani <14844597+samrusani@users.noreply.github.com>
…4929) (tinyhumansai#4998)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Steven Enamakel <31011319+senamakel@users.noreply.github.com>
Co-authored-by: Cyrus Gray <144336577+graycyrus@users.noreply.github.com>
Co-authored-by: oxoxDev <164490987+oxoxDev@users.noreply.github.com>
Co-authored-by: YellowSnnowmann <167776381+YellowSnnowmann@users.noreply.github.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
Co-authored-by: CodeGhost21 <164498022+CodeGhost21@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: sanil-23 <sanil@tinyhumans.ai>
Co-authored-by: M3gA-Mind <elvin@mahadao.com>
Co-authored-by: oxoxDev <oxoxdev@users.noreply.github.com>
Co-authored-by: Sami Rusani <14844597+samrusani@users.noreply.github.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
…roval prompt (tinyhumansai#5094)

Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
…completes epic tinyhumansai#4795 (tinyhumansai#5029)

Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
graycyrus and others added 26 commits July 27, 2026 21:15
…inyhumansai#5220)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Resolves the conflicts that failed the automated "Promote main to release"
workflow (run 30405225559). Brings 111 commits from main into release while
preserving release's 5 own commits (the v0.63.6/7/8 cuts and the AppImage
userns hotfix tinyhumansai#5251).

Version manifests (Cargo.toml x2, app/package.json, tauri.conf.json)
  Took release's higher 0.63.8 over main's 0.63.5. In all four the version
  line was the only conflicted hunk; main's dependency and content edits
  auto-merged cleanly.

Cargo.toml - duplicate dependency key
  Main migrated tinyhumans-sdk from a git dependency to the vendored
  vendor/tinyhumans-sdk submodule; release predates that migration. The merge
  kept both declarations under [dependencies], which is a duplicate key that
  Cargo cannot parse. Dropped release's stale git line and kept main's
  vendored path dep, matching .gitmodules and the staged submodule pointer.

Cargo.lock, app/src-tauri/Cargo.lock
  Per-hunk, mirroring the manifests: version to 0.63.8, and the
  tinyhumans-sdk `source = "git+..."` hunks to main (a path dependency has no
  source line). Not regenerated, per the no-local-build constraint; both
  files parse clean with no residual 0.63.5 or sdk-git-source references.
  CI validates.

src/embed/mod.rs (add/add)
  The two sides are identical except for two doc-comment lines. Release's
  doctest imports `openhuman::`, main's `openhuman_core::`; [lib] name is
  openhuman_core on both sides, so release's would fail to compile. Took
  main's.

src/api/rest.rs
  Union: both hunks are additions from main, the parse_api_response_value
  envelope normalizer and its call site, which belong together.

src/openhuman/inference/local/service/lm_studio.rs
  Took main's import list. Release additionally imports
  LmStudioChatCompletion{Request,Response} / LmStudioChatMessage / model_ids,
  which main removed along with the code using them. Those types exist only
  on release, and the merged copy of local/lm_studio.rs is main's, so a union
  would reference types absent from the tree.

AGENTS.md
  Took main's SDK-boundary section, which supersedes release's and documents
  the vendored submodule. Carried forward the two normative rules main's
  rewrite dropped (no direct reqwest for TinyHumans JSON APIs or duplicated
  SDK wire types; no admin/webhook APIs across the SDK boundary) so the
  promotion does not delete a documented prohibition.

vendor/tinyagents
  Set to main's 3781540. The pointers genuinely diverged: main's carries 10+
  commits release lacks, including provider/embedding API changes the
  promoted core compiles against. Release-only commit be30296
  "fix(todos): serialize board deletion" is therefore not reachable from this
  pointer and needs a follow-up bump; the other release-only commit has an
  equivalent already on main.
@greptile-apps

greptile-apps Bot commented Jul 28, 2026

Copy link
Copy Markdown

Too many files changed for review. (113 files found, 100 file limit)

Bypass the limit by tagging @greptile-apps to review.

@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f99927c4-91ff-463b-9188-e92b310ae505

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

@M3gA-Mind
M3gA-Mind merged commit 8ea875c into tinyhumansai:release Jul 28, 2026
32 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1d4f92914d

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

// (gated by the attempt guard above) is the single place `sending` is
// cleared — clearing it here too would race that settle and could clear
// a NEWER turn's `sending` if the user re-sent immediately after Stop.
void flowsBuildCancel(threadId)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Pass a request id to builder cancellation

When the user clicks Stop and immediately starts another Workflow Copilot turn on the same thread, this fire-and-forget cancel can arrive after the newer turn has registered; because no requestId is passed, the server takes the unscoped None path and cancels whatever turn is currently registered. The backend and flowsBuildCancel already support scoped cancellation specifically to avoid stale Stop clicks killing superseding requests, so the hook needs to mint/retain the build request id and pass it to both buildWorkflow and flowsBuildCancel.

Useful? React with 👍 / 👎.

Comment on lines +88 to +92
match client
.post(&url)
.header("X-Sentry-Auth", &auth)
.body(body)
.send()

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Honor the Sentry shutdown timeout

With a configured Sentry DSN and an unresponsive network/proxy, this blocking .send() has no request timeout; during shutdown the transport calls flush(timeout) and Drop joins the worker thread, but a worker stuck in this POST may never reach the queued flush/shutdown task. That can hang CLI or desktop process exit indefinitely instead of respecting Sentry's shutdown timeout, so the custom client should set a bounded timeout/connect timeout or avoid an unbounded join on the sender thread.

Useful? React with 👍 / 👎.

cargo tree --locked --manifest-path "$manifest" --target "$target" \
--invert "reqwest@$version" 2>/dev/null || true
)"
if printf '%s\n' "$owners" | grep -Eq '^sentry v'; then

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Match cargo-tree owners below the root

I checked cargo tree --invert output: the queried package is printed as the root and its owners are child lines prefixed with tree glyphs (for example └── sentry v...), so this ^sentry v grep never matches the Sentry owner it is meant to forbid. In the Tauri world that means a future Sentry-owned reqwest 0.13 or native-TLS/OpenSSL edge can pass the new TLS policy gate; use --prefix none for the inverted tree too, or match the package name after the tree prefix.

Useful? React with 👍 / 👎.

Comment on lines +154 to +155
- 'vendor/motosan-ai-oauth/**'
- 'vendor/tinychannels'

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Watch tinyhumans-sdk submodule changes

This commit adds vendor/tinyhumans-sdk as the path dependency for backend routes, but the CI Lite Rust filters only add vendor/motosan-ai-oauth/** and vendor/tinychannels. A later PR that only bumps the SDK gitlink will not set rust-core/rust-core-full, so route or error-classification changes can skip the cargo checks and changed-line coverage even though this vendored SDK is now the source of truth for backend routes. Add the exact gitlink path to both Rust filters.

AGENTS.md reference: AGENTS.md:L180-L185

Useful? React with 👍 / 👎.

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.