Skip to content

fix(memory): stop a signed-in user's embeddings failing, and unstick the parked queue - #5427

Merged
M3gA-Mind merged 3 commits into
tinyhumansai:mainfrom
YellowSnnowmann:fix/memory-embeddings-stuck-queue
Aug 6, 2026
Merged

fix(memory): stop a signed-in user's embeddings failing, and unstick the parked queue#5427
M3gA-Mind merged 3 commits into
tinyhumansai:mainfrom
YellowSnnowmann:fix/memory-embeddings-stuck-queue

Conversation

@YellowSnnowmann

@YellowSnnowmann YellowSnnowmann commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Fixes a signed-in user's Memory Tree stuck permanently on Error ("log in to OpenHuman"), embeddings failing silently, and the parked job queue never recovering — four compounding defects behind one symptom.
  • inference/embeddings/cloud_adapter.rs::default_state_dir() now resolves the user-scoped credential dir ({root}/users/{active_user}, fallback users/local) instead of the empty root, so the keyless managed embedder finds the signed-in session.
  • The blocking-cause banner no longer surfaces a failure the queue has already worked past — a superseded 27-day-old auth_missing tombstone stops masquerading as the current problem.
  • Adds a "Retry failed jobs" button + memoryTreeRetryFailed wrapper (the memory_tree_retry_failed RPC had no frontend caller), keyed off the failed-job counter so it's reachable even when the banner is withheld. i18n ×14.
  • Bumps vendor/tinycortex for the per-row requeue fix (a duplicate dedupe_key no longer aborts the whole requeue).

Problem

A signed-in user's Memory Tree sat on Error with a "log in" banner while they were already logged in; Gmail/chat sync reported success but stored chunks with no vectors (silently degraded recall), and the state never cleared. Root causes:

  1. Wrong credential dir. default_state_dir() returned root ~/.openhuman, but sign-in stores the app-session token under ~/.openhuman/users/<user_id>/. The root has no auth-profiles.json, so every keyless "managed"/"cloud" embed failed with "No backend session for cloud embeddings". fix(embeddings): read managed session token from config-scoped store #5363 fixed only the config-aware sibling; this covers the no-Config call sites.
  2. Stale banner. An unrecoverable failure is terminal and keeps its failure_reason forever, so latest_failed_job_failure rendered the first diagnosis it ever saw — an auth_missing batch from 27 days earlier — while the queue completed jobs the whole time.
  3. No retry affordance. The memory_tree_retry_failed RPC (#002 FR-011) had no frontend caller, so one bad batch pinned the panel on error permanently.
  4. Requeue aborted on duplicate dedupe_key. Self-heal and manual retry flipped every failed row in one UPDATE, colliding on the partial unique index and requeueing nothing (tinycortex).

Solution

  1. default_state_dir() mirrors config::load's directory choice — OPENHUMAN_WORKSPACE when set, else {root}/users/{active_user_id} (fallback users/local). Split into a pure user_scoped_state_dir for unit testing. Never logs the path or user id.
  2. A failure counts as the blocking cause only when no done job has completed since it (MAX(completed_at_ms) watermark). It is still counted (status stays error, the "N unrecoverable failure(s) need action" reason stands); only the remediation text is withheld once untrue.
  3. memoryTreeRetryFailed + a "Retry failed jobs" button keyed off pipeline_jobs.failed, so it stays reachable in the superseded case. Graceful error toast; button re-enables on failure.
  4. Requeue per row in one transaction: newest-per-dedupe_key requeues, siblings settle as cancelled, keys held by a live row are skipped. Fixed in vendor/tinycortex (fix(queue): requeue failed jobs per row so a dedupe collision cannot abort the batch tinycortex#139).

Submission Checklist

If a section does not apply to this change, mark the item as N/A with a one-line reason. Do not delete items.

  • Tests added or updated (happy path + at least one failure / edge case) — 2 core credential-scope tests, 3 core supersession tests (both branches + never-succeeded), 5 panel tests (shows/hidden/superseded/click/error re-enable), 3 tinycortex dedupe-collision tests
  • Diff coverage ≥ 80% — focused suites pass locally (32/32 panel, 6/6 core-changed, 99/99 tinycortex queue); full diff-cover gate not measured locally, CI enforces
  • Coverage matrix updated — N/A: behaviour-only bug fix, no new/renamed feature IDs
  • All affected feature IDs listed under ## RelatedN/A: no new feature IDs
  • No new external network dependencies introduced
  • Manual smoke checklist updated — N/A: existing Memory Tree surface, no new smoke step
  • Linked issue closed via Closes #NNN in ## Related

Impact

  • Runtime: shipped desktop (Windows/macOS/Linux). Restores managed embeddings for signed-in users and unsticks parked queues. No migration, no config change.
  • Security: default_state_dir narrows the credential scope to the active user's dir; never logs the resolved path or user id.
  • Depends on fix(queue): requeue failed jobs per row so a dedupe collision cannot abort the batch tinycortex#139 (the submodule bump points at that PR's commit). Re-bump the vendor/tinycortex gitlink to the merged tinycortex SHA before this merges.

Related


AI Authored PR Metadata (required for Codex/Linear PRs)

Linear Issue

  • Key: N/A
  • URL: N/A

Commit & Branch

  • Branch: fix/memory-embeddings-stuck-queue
  • Commit SHA: accf6782a527aa241780cba54dfa262a5daecfc0

Validation Run

  • pnpm --filter openhuman-app format:check — not run locally
  • pnpm typecheck — clean
  • Focused tests: MemoryTreeStatusPanel.test.tsx 32/32; core default_scope_* + blocking_cause_* 6/6
  • Rust fmt/check (if changed): GGML_NATIVE=OFF cargo check --bin openhuman-core exit 0 (fmt not run)
  • Tauri fmt/check (if changed): N/A: no app/src-tauri changes

Validation Blocked

  • command: N/A
  • error: N/A
  • impact: N/A

Behavior Changes

  • Intended behavior change: signed-in keyless managed embeds succeed; a superseded failure no longer shows a remediation banner (still counted + retryable); a "Retry failed jobs" button appears when failed jobs exist.
  • User-visible effect: Memory Tree leaves the false Error/"log in" state; parked jobs can be requeued from the panel.

Parity Contract

  • Legacy behavior preserved: OPENHUMAN_WORKSPACE deployments keep the root scope; failures are still counted and still gate status to error; the derive_pipeline_status status/reason path is unchanged.
  • Guard/fallback/dispatch parity checks: pre-login falls back to users/local; NULL completed_at_ms surfaces the failure unconditionally (legacy rows); retry error path re-enables the button.

Duplicate / Superseded PR Handling

  • Duplicate PR(s): none
  • Canonical PR: this
  • Resolution: N/A

Summary by CodeRabbit

  • New Features

    • Added a “Retry failed” action to the Memory Tree status panel.
    • Shows progress, requeued-job counts, success messages, and error feedback.
    • Automatically refreshes status after retry attempts.
  • Bug Fixes

    • Superseded failure messages are no longer displayed.
    • Cloud embedding credentials resolve from the active workspace.
  • Localization

    • Added translated retry controls and status messages across supported languages.
  • Tests

    • Added coverage for retry visibility, outcomes, and status refresh behavior.

…the parked queue

Four defects that compounded into one symptom: a signed-in user whose Memory
Tree sat permanently on "Error", telling them to log in.

1. The keyless managed embedder read the wrong credential directory.
   `default_state_dir()` returned the root `~/.openhuman`, but sign-in stores
   the `app-session` token through `AuthService::from_config`, i.e. under the
   user-scoped `~/.openhuman/users/<user_id>/`. The root holds no
   `auth-profiles.json`, so every embed through `create_embedding_provider_with_credentials`
   ("managed"/"cloud") failed with "No backend session for cloud embeddings"
   while the user was signed in and the socket was authenticated. Gmail sync
   reported success and stored every chunk without vectors.

   `default_state_dir()` now resolves `{root}/users/{active_user_id}` (falling
   back to the pre-login `users/local`), keeping the `OPENHUMAN_WORKSPACE` branch
   for deployments that co-locate config and credentials at one root. tinyhumansai#5363
   fixed only the config-aware sibling; this covers the call sites that hold no
   `Config`.

2. The status panel presented a superseded failure as the current cause.
   An unrecoverable failure is terminal by design and its row keeps its
   `failure_reason` forever, so `latest_failed_job_failure` kept rendering the
   first diagnosis it ever saw. In practice that meant an `auth_missing` batch
   from 27 days earlier producing a "log in to OpenHuman" banner for a user who
   already was, while the queue completed jobs normally throughout. A failure is
   now only reported as the blocking cause when no job has settled successfully
   since it; the failure is still counted and still needs clearing, but the
   remediation text is withheld once it stops being true.

3. There was no way to clear parked failures from the app. The
   `memory_tree_retry_failed` RPC (#2 FR-011) had no caller anywhere in the
   frontend, so a single bad batch pinned the panel on `error` permanently. Adds
   the `memoryTreeRetryFailed` wrapper and a "Retry failed jobs" button, keyed
   off the failed-job counter rather than the blocking-cause banner so it stays
   reachable in exactly the superseded case above.

4. Requeue itself aborted on a duplicate `dedupe_key` (vendor/tinycortex bump).
   Both the periodic self-heal and the manual retry flipped every failed row in
   one UPDATE, colliding on the partial unique index and requeueing nothing.
   Fixed in the submodule; see its commit for detail.

Tests: 3 for the credential scope + supersession invariants in the core, 3 in
tinycortex for the collision, 5 in the panel suite for the retry affordance.
i18n keys added to all 14 locales.
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: fbf563c7-de5c-4f85-a5a1-a8b618d57921

📥 Commits

Reviewing files that changed from the base of the PR and between accf678 and bd0bfba.

📒 Files selected for processing (15)
  • app/src/components/intelligence/MemoryTreeStatusPanel.test.tsx
  • app/src/components/intelligence/MemoryTreeStatusPanel.tsx
  • app/src/lib/i18n/de.ts
  • app/src/lib/i18n/en.ts
  • app/src/lib/i18n/es.ts
  • app/src/lib/i18n/fr.ts
  • app/src/lib/i18n/it.ts
  • app/src/lib/i18n/pt.ts
  • app/src/services/analytics.ts
  • app/src/utils/tauriCommands/memoryTree.test.ts
  • src/openhuman/config/mod.rs
  • src/openhuman/config/schema/load/mod.rs
  • src/openhuman/config/schema/mod.rs
  • src/openhuman/inference/embeddings/cloud_adapter.rs
  • src/openhuman/memory/tree/tree/rpc.rs
🚧 Files skipped from review as they are similar to previous changes (10)
  • app/src/lib/i18n/en.ts
  • app/src/lib/i18n/de.ts
  • app/src/lib/i18n/pt.ts
  • app/src/components/intelligence/MemoryTreeStatusPanel.tsx
  • app/src/lib/i18n/it.ts
  • app/src/components/intelligence/MemoryTreeStatusPanel.test.tsx
  • src/openhuman/memory/tree/tree/rpc.rs
  • app/src/lib/i18n/fr.ts
  • src/openhuman/inference/embeddings/cloud_adapter.rs
  • app/src/lib/i18n/es.ts

📝 Walkthrough

Walkthrough

The PR adds a Memory Tree retry flow with RPC handling, localized messages, analytics, and tests. It suppresses stale failure causes, scopes cloud embedding credentials by workspace and user, and updates the tinycortex submodule reference.

Changes

Memory Tree retry flow

Layer / File(s) Summary
Retry RPC and panel flow
app/src/utils/tauriCommands/memoryTree.ts, app/src/components/intelligence/MemoryTreeStatusPanel.tsx, app/src/services/analytics.ts
Adds the retry RPC and panel action. The panel tracks busy state, shows localized success or error toasts, records the requeued count, and refreshes status after success.
Retry validation and localized states
app/src/components/intelligence/MemoryTreeStatusPanel.test.tsx, app/src/utils/tauriCommands/memoryTree.test.ts, app/src/lib/i18n/*
Tests RPC dispatch, visibility, success, failure, refresh, and button state. Adds retry messages in supported locales.

Failure cause supersession

Layer / File(s) Summary
Current failure cause selection
src/openhuman/memory/tree/tree/rpc.rs
Suppresses a failed-job cause when a newer successful job exists. Adds regression coverage for superseded, current, and never-successful failures.

Scoped embedding credentials

Layer / File(s) Summary
Workspace and user credential resolution
src/openhuman/config/*, src/openhuman/inference/embeddings/cloud_adapter.rs
Resolves credentials through the workspace configuration directory or a user-scoped directory. Uses the pre-login directory when no active user exists. Adds resolution tests.

Tinycortex reference update

Layer / File(s) Summary
Vendored reference
vendor/tinycortex
Updates the tinycortex submodule pointer.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

Suggested reviewers: senamakel

Sequence Diagram(s)

sequenceDiagram
  participant Operator
  participant MemoryTreeStatusPanel
  participant memoryTreeRetryFailed
  participant MemoryTreeCore
  Operator->>MemoryTreeStatusPanel: click retry failed
  MemoryTreeStatusPanel->>memoryTreeRetryFailed: request retry
  memoryTreeRetryFailed->>MemoryTreeCore: invoke retry RPC
  MemoryTreeCore-->>memoryTreeRetryFailed: return requeued count
  memoryTreeRetryFailed-->>MemoryTreeStatusPanel: return result
  MemoryTreeStatusPanel-->>Operator: show toast and refreshed status
Loading

Poem

A rabbit clicks retry with care,
Failed jobs hop back through the air.
Fresh success clears stale blame,
Scoped paths keep credentials tame.
New words greet each locale bright—
Tinycortex hops to a newer site.

🚥 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 summarizes the main fixes for signed-in user embeddings and stalled job queues.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

@YellowSnnowmann
YellowSnnowmann marked this pull request as ready for review August 6, 2026 14:20
@YellowSnnowmann
YellowSnnowmann requested a review from a team August 6, 2026 14:20

@greptile-apps greptile-apps 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@coderabbitai coderabbitai Bot added bug memory Memory store, memory tree, recall, summarization, and embeddings in src/openhuman/memory/. rust-core Core Rust runtime in src/: CLI, core_server, shared infrastructure. labels Aug 6, 2026

@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: accf6782a5

ℹ️ 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".

Comment thread src/openhuman/inference/embeddings/cloud_adapter.rs Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 8

🧹 Nitpick comments (1)
src/openhuman/memory/tree/tree/rpc.rs (1)

694-717: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Log every supersession decision.

This flow logs only the superseded branch. Add safe debug diagnostics for the active-failure and missing-timestamp branches. Include the decision and timestamps. Do not log user-authored values.

As per coding guidelines, “New or changed flows must include verbose, grep-friendly diagnostics for entry/exit, branches, external calls, retries, state transitions, and errors, while never logging secrets or full PII.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/openhuman/memory/tree/tree/rpc.rs` around lines 694 - 717, The
pipeline_status failure-handling flow currently logs only when a failure is
superseded. Add safe, grep-friendly debug logs for the active-failure decision
and the missing failed_at_ms branch, including the relevant decision and
timestamps while excluding the user-authored reason. Update the visible branch
around failed_at_ms and the existing supersession check, preserving the current
return behavior.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@app/src/components/intelligence/MemoryTreeStatusPanel.tsx`:
- Around line 391-403: The handleRetryFailed flow currently tracks only the
button interaction, not successful completion. After memoryTreeRetryFailed()
resolves in handleRetryFailed, call trackAnalyticsEvent using a stable
success-event identifier and only privacy-safe dimensions such as requeued or
none, before showing the success toast.
- Around line 391-411: Extend handleRetryFailed with grep-friendly diagnostics
for the retryBusy guard, RPC start, setRetryBusy transitions, and callback exit,
while retaining the existing entry, result, and error logs. Use fixed labels
only, avoid identifiers or user-specific values, and ensure the exit log is
emitted regardless of success or failure.

In `@app/src/lib/i18n/de.ts`:
- Line 1357: Update the translation value for memoryTree.status.retryFailedCount
to use count-neutral German wording, removing the “Job(s)” construction while
preserving the count placeholder and meaning for singular and plural counts.

In `@app/src/lib/i18n/es.ts`:
- Around line 1336-1337: Update the translation values for
memoryTree.status.retryFailedDone and memoryTree.status.retryFailedCount to use
natural Spanish; replace “vueltos a la cola” with idiomatic wording and remove
the “(s)” marker by choosing count-neutral phrasing that works for both singular
and plural values.

In `@app/src/lib/i18n/fr.ts`:
- Around line 1349-1352: Update the French translation for
memoryTree.status.retryFailedCount to describe tasks being placed back in the
queue, using natural French without the “replanifiée(s)” wording. Keep the count
placeholder and align the terminology with the nearby retryFailedDone and
retryFailedError messages.

In `@app/src/lib/i18n/pt.ts`:
- Line 1334: Update the memoryTree.status.retryFailedCount translation to avoid
the literal “tarefa(s)” construction, using plural-aware Portuguese text that
renders grammatically correct singular and plural forms based on count.

In `@src/openhuman/inference/embeddings/cloud_adapter.rs`:
- Around line 77-103: Add privacy-safe debug diagnostics at entry and successful
completion of default_state_dir, using grep-friendly messages that do not
include the resolved path or user ID. Preserve the existing branch-selection and
error logs, and ensure the completion diagnostic is emitted after the final
credential scope has been resolved.

In `@src/openhuman/memory/tree/tree/rpc.rs`:
- Around line 680-711: Update the failure lookup in latest_failed_job_failure to
derive the latest failed job and latest successful completed_at_ms within one
SQL statement or a single read transaction. Replace the separate last_success_ms
query with a value read from that same SQLite snapshot, preserving the existing
remediation decision and return behavior.

---

Nitpick comments:
In `@src/openhuman/memory/tree/tree/rpc.rs`:
- Around line 694-717: The pipeline_status failure-handling flow currently logs
only when a failure is superseded. Add safe, grep-friendly debug logs for the
active-failure decision and the missing failed_at_ms branch, including the
relevant decision and timestamps while excluding the user-authored reason.
Update the visible branch around failed_at_ms and the existing supersession
check, preserving the current return behavior.
🪄 Autofix

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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9a721740-c033-47a4-b6b5-977b13409c6e

📥 Commits

Reviewing files that changed from the base of the PR and between e29bfc6 and accf678.

📒 Files selected for processing (20)
  • app/src/components/intelligence/MemoryTreeStatusPanel.test.tsx
  • app/src/components/intelligence/MemoryTreeStatusPanel.tsx
  • app/src/lib/i18n/ar.ts
  • app/src/lib/i18n/bn.ts
  • app/src/lib/i18n/de.ts
  • app/src/lib/i18n/en.ts
  • app/src/lib/i18n/es.ts
  • app/src/lib/i18n/fr.ts
  • app/src/lib/i18n/hi.ts
  • app/src/lib/i18n/id.ts
  • app/src/lib/i18n/it.ts
  • app/src/lib/i18n/ko.ts
  • app/src/lib/i18n/pl.ts
  • app/src/lib/i18n/pt.ts
  • app/src/lib/i18n/ru.ts
  • app/src/lib/i18n/zh-CN.ts
  • app/src/utils/tauriCommands/memoryTree.ts
  • src/openhuman/inference/embeddings/cloud_adapter.rs
  • src/openhuman/memory/tree/tree/rpc.rs
  • vendor/tinycortex

Comment thread app/src/components/intelligence/MemoryTreeStatusPanel.tsx
Comment thread app/src/components/intelligence/MemoryTreeStatusPanel.tsx
Comment thread app/src/lib/i18n/de.ts Outdated
Comment thread app/src/lib/i18n/es.ts Outdated
Comment thread app/src/lib/i18n/fr.ts
Comment thread app/src/lib/i18n/pt.ts Outdated
Comment thread src/openhuman/inference/embeddings/cloud_adapter.rs
Comment thread src/openhuman/memory/tree/tree/rpc.rs Outdated
…al scope, supersession race, retry UX

- cloud_adapter: resolve OPENHUMAN_WORKSPACE through resolve_config_dir_for_workspace
  (mirrors config::load) so a legacy .../workspace override lands on the sibling
  .openhuman credential dir, not the workspace dir — fixes a "No backend session"
  regression for that env-override deployment (Codex P2). Adds entry/per-branch
  diagnostics and a regression test; threads the resolver through config re-exports.
- rpc: read the newest failed row and the success watermark in one with_connection
  closure so a job settling between the two reads cannot flip the supersession
  decision (CodeRabbit race); log every supersession branch.
- panel: track the successful requeue outcome (memory_tree_retry_succeeded, count
  only) and add busy-guard / rpc-start / exit diagnostics.
- i18n: count-neutral wording for retryFailedCount across en/de/es/fr/pt/it; fr now
  uses queue wording instead of "reschedule", es drops "vueltos a la cola".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@greptile-apps greptile-apps 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 6, 2026
@YellowSnnowmann

Copy link
Copy Markdown
Contributor Author

Addressed all review feedback in 3b5c13d:

Correctness

  • Codex P2 (OPENHUMAN_WORKSPACE) — the keyless embedder now resolves the credential scope through resolve_config_dir_for_workspace, the same mapping config::load uses, so a legacy .../workspace override no longer regresses to "No backend session". Regression test added.
  • Supersession race (rpc.rs) — the failed row and the success watermark are now read in a single with_connection closure (global connection mutex held across both), so a concurrent settle can't flip the decision.

Diagnostics — added grep-friendly logs to the credential-scope resolver (entry + per-branch), the supersession decision (all three branches — covers the "log every branch" nitpick), and the retry flow (busy-guard / rpc-start / exit).

Analytics — the successful requeue now emits memory_tree_retry_succeeded (privacy-safe count only), asserted in the panel test.

i18nretryFailedCount reworded to a count-neutral Label: {count}. form (matching the existing pl/ru style) across de/es/fr/pt and en/it for consistency, removing every (s)//i plural marker; fr now uses queue wording instead of "reschedule", es drops "vueltos a la cola".

Local validation: cargo check + cargo clippy --lib clean · core unit tests 7/7 (incl. the new workspace-scope test) · panel suite 32/32 · cargo fmt --check clean · pnpm typecheck clean · i18n check 0 missing / 0 extra / 0 unexpected-English.

Note: the earlier Rust Quality red was a transient static.crates.io connectivity failure in the runner (clippy dep fetch), not a code issue — it re-runs on this push.

…overage gate

PR CI Gate's merged diff-cover was 73% (<80%): the memory_tree_retry_failed RPC
wrapper (memoryTree.ts:926-933) had no test. Add envelope + bare-shape dispatch
tests, mirroring memoryTreeFlushNow, bringing changed-line coverage to ~93%.
The panel's defensive busy-guard log stays uncovered by design -- the button is
disabled while a retry is in flight, so the guard is unreachable via the UI.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@greptile-apps greptile-apps 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@YellowSnnowmann

Copy link
Copy Markdown
Contributor Author

Pushed bd0bfba15: the PR CI Gate (merged diff-cover) was at 73% because the memory_tree_retry_failed RPC wrapper had no unit test. Added envelope + bare-shape dispatch tests for it (mirroring memoryTreeFlushNow), which lifts changed-line coverage to ~93%. No production code changed. Re-running CI.

@coderabbitai coderabbitai Bot removed rust-core Core Rust runtime in src/: CLI, core_server, shared infrastructure. memory Memory store, memory tree, recall, summarization, and embeddings in src/openhuman/memory/. bug labels Aug 6, 2026
@M3gA-Mind
M3gA-Mind merged commit 8deb5f2 into tinyhumansai:main Aug 6, 2026
28 of 43 checks passed
@github-project-automation github-project-automation Bot moved this from Todo to Done in Team Openhuman Aug 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

Signed-in user's Memory Tree stuck on Error; embeddings silently fail and the parked queue never recovers

2 participants