Skip to content

chore(modules): re-pin the memory module to tinymemory v1.13.8 - #6013

Merged
YellowSnnowmann merged 1 commit into
tinyhumansai:mainfrom
YellowSnnowmann:fix/6007-repin-tinymemory-1138
Sep 3, 2026
Merged

chore(modules): re-pin the memory module to tinymemory v1.13.8#6013
YellowSnnowmann merged 1 commit into
tinyhumansai:mainfrom
YellowSnnowmann:fix/6007-repin-tinymemory-1138

Conversation

@YellowSnnowmann

@YellowSnnowmann YellowSnnowmann commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator

Summary

Re-pins the memory module to v1.13.8, which is what actually turns on the #6007 fix for users.

tinyhumansai/tinymemory#134 fixed the primary defect: MemorySourceSink::accept_source_items wrote namespace documents and vector chunks but never mem_tree_chunks, so a Gmail sync landed thousands of documents and embeddings while tree-backed recall, the Memory Tree graph and the source row's ingest status all reported zero. This repo only dev-depends on tinymemory-tinycortex; the production engine ships inside the prebuilt TinyBus module, so that fix reaches nobody until the pin moves.

Four things move together, because they have to:

  • vendor/tinymemory → the v1.13.8 commit (ded26aec253e70)
  • registry_part_01.rs → version, release_url, and all 11 platform assets with their published checksums
  • ARTIFACT_CAPABILITIES_PIN1.13.8
  • the CI workflowsci-full.yml, ci-lite.yml and e2e-reusable.yml pin memory_version and memory_sha256 for ubuntu-22.04-x86_64 independently of the registry (4 sites; e2e-reusable.yml has two)

That fourth one is easy to miss and the_ci_workflows_pin_the_same_module_digest_as_the_registry exists to catch it — it caught this one. Without it the workflows would download the 1.13.8 archive, verify it against the 1.13.7 digest and refuse it, turning every E2E lane red for a reason that reads nothing like a stale pin.

The Module Pin Gate asserts the registry pin matches the submodule pin, and the_capability_list_matches_the_pinned_release fails if the capability pin lags the registry — so splitting these into separate commits would just produce a red intermediate state.

Verification

Checked rather than assumed, since a pin that points at the wrong build is silent:

  • The tag contains the fix. git merge-base --is-ancestor f143a150 v1.13.8 passes (f143a150 is the feat(onboarding): calmer onboarding + local AI download snackbar #134 merge), and ingest_connector_item_tolerated is present in crates/tinymemory-core/src/engine/sync.rs at the tag.
  • Every checksum matches the release. All 11 sha256 values were generated from the release's own checksum.toml asset and then cross-checked back against it — 11/11 match, none published-but-unpinned. The archive name and its hash are rewritten as one unit, so a name cannot end up beside the previous release's hash.
  • No new capability family. git diff v1.13.7..v1.13.8 -- crates/tinymemory-api/src/capabilities.rs returns empty, so ARTIFACT_CAPABILITIES itself is unchanged and only the pin string moves. The fix is behaviour inside Sources/Maintenance, not a new family. Recorded in the comment next to the pin, matching the convention the surrounding notes already follow.
  • Nested submodule pins are unchanged between v1.13.7 and v1.13.8, so nothing else in vendor/ shifts underneath this.

What this does and does not fix

Does: newly-synced Composio items — every toolkit, not just Gmail (gmail, github, notion, slack, linear, clickup all flow through the same accept_source_items path) — now produce mem_tree_chunks rows keyed {toolkit}:{connection_id}:{item_id}, so the source row's ingest status, tree recall and the memory graph can all see them. Also fixes the companion leak: forget_source now sweeps those per-item rows, so disconnecting an account no longer leaves its synced content retrievable in the tree.

Does not: recover the records already on disk. The per-item sync gate treats already-ingested items as done, so a plain re-sync creates no tree rows for them; recovery today means removing and re-adding the source. Backfill is tracked in #6012.

Worth watching after this ships: connector ingest now embeds twice — once into vector_chunks, once into mem_tree_chunks. On the profile in #6007 that is roughly 8000 additional chunk embeddings for one Gmail account, which touches the embedding budget #5324 added exhaustion warnings for.

Relationship to the other #6007 PRs

With this merged, #6007 is fixed for new syncs and can be closed once #6011 lands.

Test plan

  • cargo fmt --all --check
  • cargo test --lib modules:: — 96 passed, 0 failed, including the_capability_list_matches_the_pinned_release and the_ci_workflows_pin_the_same_module_digest_as_the_registry (the latter failed on the first run and is what surfaced the workflow pins)
  • Registry checksums cross-checked against the release's checksum.toml (11/11)
  • Tag ancestry and funnel presence verified at v1.13.8

Refs #6007

Summary by CodeRabbit

  • Updates
    • Updated the TinyMemory integration to version 1.13.8 across supported platforms.
    • Refreshed checksum verification for end-to-end testing, coverage, and mock-backend workflows.
    • Updated the bundled TinyMemory component to the latest compatible revision.
    • Preserved the existing capability set while incorporating the latest memory-tree handling behavior.

v1.13.8 carries tinyhumansai/tinymemory#134, which routes connector items into
the memory-tree ingest funnel. Before it, a Composio sync wrote namespace
documents and vector chunks but never `mem_tree_chunks`, so Gmail synced
thousands of records while tree recall, the Memory Tree graph and the source
row's ingest status all reported zero.

This repo only dev-depends on `tinymemory-tinycortex` — the production engine
ships inside the prebuilt TinyBus module — so that fix reaches nobody until the
pin moves. Four pins move together, because any subset is a red intermediate
state:

- `vendor/tinymemory` -> the v1.13.8 commit (ded26ae -> c253e70)
- the registry descriptor: version, release_url, and all 11 platform assets
  with the checksums published on the release
- `ARTIFACT_CAPABILITIES_PIN`, which `the_capability_list_matches_the_pinned_release`
  compares against the registry
- `memory_version` / `memory_sha256` in ci-full.yml, ci-lite.yml and
  e2e-reusable.yml, which pin the ubuntu-22.04-x86_64 archive independently
  (4 sites). `the_ci_workflows_pin_the_same_module_digest_as_the_registry`
  caught these; unfixed, CI downloads the 1.13.8 archive, checks it against the
  1.13.7 digest and refuses it.

Verified rather than assumed, since a pin aimed at the wrong build fails
silently: v1.13.8 has the tinyhumansai#134 merge (f143a150) as an ancestor and carries
`ingest_connector_item_tolerated` at the tag; all 11 checksums were generated
from the release's own checksum.toml and cross-checked back against it, with
each archive name and its digest rewritten as one unit so a name cannot end up
beside the previous release's hash; and
`git diff v1.13.7..v1.13.8 -- crates/tinymemory-api/src/capabilities.rs` is
empty, so no family was added and only the pin string moves.

Recovers nothing already on disk — the per-item sync gate treats ingested items
as done, so existing records need the backfill tracked in tinyhumansai#6012.

Refs tinyhumansai#6007
@coderabbitai

coderabbitai Bot commented Sep 3, 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: Team

Run ID: 65ab0a9f-b009-4b07-946a-23dc14e75f7d

📥 Commits

Reviewing files that changed from the base of the PR and between e2aba85 and 880acbb.

📒 Files selected for processing (6)
  • .github/workflows/ci-full.yml
  • .github/workflows/ci-lite.yml
  • .github/workflows/e2e-reusable.yml
  • src/openhuman/modules/memory_part_01.rs
  • src/openhuman/modules/registry_part_01.rs
  • vendor/tinymemory

Included review availability: Your plan provides up to 10 included reviews per hour; 7 remain after this review.


📝 Walkthrough

Walkthrough

TinyMemory is updated from 1.13.7 to 1.13.8 across module metadata, platform artifact checksums, the vendored reference, and CI workflows.

Changes

TinyMemory 1.13.8 upgrade

Layer / File(s) Summary
Module metadata and vendor reference
src/openhuman/modules/memory_part_01.rs, src/openhuman/modules/registry_part_01.rs, vendor/tinymemory
The capability pin, release metadata, platform archives, checksums, and vendored subproject reference now target TinyMemory 1.13.8.
CI checksum pins
.github/workflows/ci-full.yml, .github/workflows/ci-lite.yml, .github/workflows/e2e-reusable.yml
E2E and coverage jobs download and verify TinyMemory 1.13.8 with its new SHA-256 digest.

Estimated code review effort: 2 (Simple) | ~8 minutes

Merge Risk: ⚪ Minimal · up to 880ac

This updates TinyMemory to 1.13.8, enabling connector items to enter the memory-tree ingest path and ensuring corresponding cleanup on source removal. The module metadata, artifact pins, and CI download pins are aligned, with no active merge-readiness risk identified.

Suggested reviewers: senamakel

Poem

A rabbit checks the pins with care
One point thirteen eight is there
The hashes match the module bright
CI hops through every flight
Memory trees now bloom just right

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 2…
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: updating the memory module pin to tinymemory v1.13.8.
Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 2 files. (4 skipped: 4 unsupported.)


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

@YellowSnnowmann
YellowSnnowmann marked this pull request as ready for review September 3, 2026 17:01
@YellowSnnowmann
YellowSnnowmann requested a review from a team September 3, 2026 17:01
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 3, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-03T17:05:04.736180Z 880acbb Draft marked ready
🔒 Security Review Completed 2026-09-03T17:08:01.372666Z 880acbb Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@tinysweeper tinysweeper 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.

tinysweeper found nothing blocking. Approving.

             $0.0151 · 139,507 in / 3,442 out · 15,364 cached (11%) · openrouter/openai/text-embedding-3-small, deepseek/deepseek-v4-flash, z-ai/glm-5.2 · 1,012 embedded
critique:    $0.0053 · 58,905 in  / 1,356 out · 0 cached (0%)       · deepseek/deepseek-v4-flash
security:    $0.0057 · 58,285 in  / 582 out   · 8,964 cached (15%)  · deepseek/deepseek-v4-flash, z-ai/glm-5.2
tests:       $0.0012 · 14,629 in  / 113 out   · 0 cached (0%)       · deepseek/deepseek-v4-flash
description: $0.0029 · 7,688 in   / 1,391 out · 6,400 cached (83%)  · z-ai/glm-5.2

@tinysweeper tinysweeper Bot added the priority: p3 Whenever. Cosmetic, a nicety, or a cleanup with no user visible effect. label Sep 3, 2026
@YellowSnnowmann
YellowSnnowmann merged commit b7f4e94 into tinyhumansai:main Sep 3, 2026
35 checks passed
YellowSnnowmann added a commit that referenced this pull request Sep 4, 2026
#6007 fixed the routing for items synced from then on, and #6013 shipped it.
Neither recovers the records already stored: the per-item sync gate treats an
ingested document as done, so a re-sync fetches nothing and creates no tree
rows. On the profile that reported the bug that is ~3000 documents, fully
embedded in the document store and invisible to tree recall, the memory graph
and the source row's ingest status. Recovery today means removing and re-adding
the account, which re-fetches everything at the provider's expense.

The walk itself lives in the engine (tinyhumansai/tinymemory#136), beside the
funnel the sync path uses, so a backfilled row and a freshly-synced row are the
same row. This is the host half: the module forwarder, the guard, and the RPC.

- The forwarder takes the bulk deadline. A pass reads and re-embeds up to its
  whole limit of documents, and the default 30s bus deadline is what made the
  connector sync retry a finished handoff forever.
- The guard takes the write tier, like every other mutating maintenance member.
  A readonly operator may inspect a store; re-filing thousands of its documents
  is not inspection.
- `dry_run` defaults to TRUE at the RPC boundary. A pass costs one read and one
  set of chunk embeddings per document against the user's embedding budget
  (#5324), so a caller that omits the field gets the preview and the write is
  something they ask for.

The response carries four counters rather than one because "did nothing" has
three different causes an operator must tell apart: the tree already held
everything, nothing could be addressed, or there was nothing to look at.

Refs #6012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority: p3 Whenever. Cosmetic, a nicety, or a cleanup with no user visible effect.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant