# Reported issues for Titen Memory

Pod holds 19 of 25 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to [Titen Memory](/mcp/titen-memory).

## Most discussed

### bug: configured semantic retrieval can silently fall back to FTS while readiness stays healthy

## Severity

P0 operational and replacement-safety blocker.

## Version and environment

- `titen-memory@0.3.0`
- npm SHA-1 `568d56175257f515ee3c79c7672d62bc39c07dda`
- peeled tag commit `9f10bfd625ba947897056f1dbc0ab7bfc4ce6304`
- Node 24/Bun 1.3.13 clean consumer install and VPS canary

## Reproduction

1. Install only `titen-memory@0.3.0` as a production consumer.
2. Set the complete `TITEN_EMBED_BASE_URL`, `TITEN_EMBED_MODEL`, and `TITEN_EMBED_DIMS` tuple.
3. Do not separately install the op

[Read the thread](https://github.com/RamaAditya49/titen/issues/138) · 2026-07-31 · closed · 5 comments

### bug: resolveHandoff and saveCheckpoint use SELECT-then-write with no fence — 8 parallel calls all succeed under D1-like latency

**Runtime:** Shared core (affects Cloudflare/D1 and the in-process MCP path)
**Version:** `titen-memory@0.2.1`

## What happened

Two mutations guard races with SELECT-then-write and nothing else. Every sibling that uses a primary key or unique index stays correct under the same conditions.

Reproduced by running the **unmodified** Titen core in-process behind a `Db` wrapper that adds latency to `all()`/`batch()` — i.e. what D1 actually costs, versus the synchronous `bun:sqlite` driver.

### 1. 

[Read the thread](https://github.com/RamaAditya49/titen/issues/102) · 2026-07-31 · closed · 5 comments

### Maturity roadmap: production interoperability and canonical-memory readiness

## Context

We compared the current live Mem0 deployment (shared semantic recall through the Wulan memory service) with the published `titen-memory@0.2.0` SDK/service. Titen has the stronger evidence/governance model, but it is not yet a drop-in replacement for an existing multi-agent semantic-memory pipeline.

This issue tracks the maturity work needed before Titen can be used as a canonical memory backend alongside or instead of Mem0.

## Gaps to address

### 1. Production deployment and opera

[Read the thread](https://github.com/RamaAditya49/titen/issues/77) · 2026-07-31 · closed · 5 comments

### [P1] integration: extraction cannot use providers that ignore strict JSON schema

## Severity

P1 integration blocker for model-assisted enrichment on the current local/VPS provider route. Titen receives successful JSON responses, but none can enter the release validator because the provider does not enforce the requested strict schema.

## Release identity

- `titen-memory@0.4.0`
- annotated tag commit: `729ec078d4bdc4490904c5c243a6dfa3c0647def`
- npm SHA-1: `df0ecc5d22c1261cde53ec6785b2f8c51de0897d`
- adapter: `src/core/extraction.ts`
- production bound: one claim per enric

[Read the thread](https://github.com/RamaAditya49/titen/issues/184) · 2026-07-31 · closed · 4 comments

### S6 — List in the official MCP registry

**S6 of the [substitution and write-hygiene plan](https://github.com/RamaAditya49/titen/blob/main/docs/plans/active/2026-08-06-substitution-and-write-hygiene.md).** Effort: hours.

## Problem

`registry.modelcontextprotocol.io/v0/servers?search=titen` returns count 0, and the `modelcontextprotocol/servers` README routes every discovery query there. S2 hands people a reason to switch and no way to find us.

## Spec

Publish to the official MCP registry. An afternoon. Do not treat it as strategy —

[Read the thread](https://github.com/RamaAditya49/titen/issues/283) · 2026-08-06 · closed · 2 comments

### [P1] Add memory browse, correction, redaction, and history surfaces

## Evidence
On healthy authorized 0.3.0: `GET /v1/memories` 404, `GET /v1/claims` 404, `GET /v1/history` 404, and `GET /v1/observations` 405. SDK/MCP lack a simple general browse/get/correct/forget/history workflow.

## Acceptance criteria
- Paginated browse/search/detail for observations and claims with scope/status/category/time filters.
- Public lifecycle history with actor/reason/evidence.
- Correction as append plus atomic supersession.
- Privacy redaction/purge distinct from revoke/expire,

[Read the thread](https://github.com/RamaAditya49/titen/issues/142) · 2026-07-31 · closed · 2 comments

### bug: every claim has a ~0.42 relevance-independent score floor, so compile returns and bills for items scored relevance 0

**Runtime:** Shared core
**Version:** `titen-memory@0.2.1`

## What happened

`RANK_WEIGHTS` (`src/core/rank.ts:3-10`) gives relevance a weight of only **0.4**. The other 0.6 is trust, recency, feedback utility and confidence — none of which depend on the query.

For a typical corpus (`trust=verified`, fresh, no feedback yet, `confidence=0.9`) every claim scores:

```
0.2 x 0.667 (trust)  +  0.15 x 1.0 (recency)
+ 0.1 x 0.5 (utility, the no-feedback default)  +  0.1 x 0.9 (confidence)
= 0.4233  

[Read the thread](https://github.com/RamaAditya49/titen/issues/86) · 2026-07-31 · closed · 2 comments

### [P1] Ship a native OpenClaw memory provider with safe scope and lifecycle parity

## Summary
Titen 0.2.1 provides REST, SDK, and Titen-specific MCP tools, but it cannot replace the active OpenClaw memory slot. The documented host-native package is deferred, and the current surfaces do not provide standard memory tool or lifecycle parity.

## Current production baseline
The existing OpenClaw memory backend provides:
- `memory_search`, `memory_add`, `memory_get`, `memory_list`, `memory_update`, `memory_delete`, event status tools;
- bounded auto-recall, policy-controlled captur

[Read the thread](https://github.com/RamaAditya49/titen/issues/81) · 2026-07-31 · closed · 2 comments

## Most recent

### bug: [major] no audited administrator path to inspect same-organization private memory

## Severity

**Major** — this blocks the documented operator/recovery workflow in personal and self-hosted deployments. It is not a cross-organization leak or canonical data-loss bug.

## Runtime

Shared core and the Bun/VPS dashboard, reproduced on Titen `0.8.1` / commit `47172bff87b5118142204a1ccb7ea87d081304e8`.

## What happened?

A bootstrap/dashboard owner with wildcard scopes cannot inspect a private observation or claim written by another agent principal in the same organization. `POST /

[Read the thread](https://github.com/RamaAditya49/titen/issues/300) · 2026-08-15 · closed · 1 comment

### bug: an observation never reaches a compile — items is always empty until something writes a consolidation

**Runtime:** Bun/VPS

## What happened?

An observation stored through `POST /v1/observations` is never selected by `POST /v1/context/compile` for the same `subject_id`. `compile` answers `200` with `items: []` and `selected_items: 0`, so a client that writes observations and reads context back gets nothing it wrote.

Reading the API surface, this looks intended rather than broken: `compile` selects **claims**, and the only route that creates a claim is `POST /v1/consolidations`, which requires 

[Read the thread](https://github.com/RamaAditya49/titen/issues/297) · 2026-08-13 · closed · 1 comment

### The nine compatibility tool names ship undocumented on titen.dev, so the substitution play has no discovery path

S2 (#279) shipped the nine `@modelcontextprotocol/server-memory` tool names, so a user can swap the reference server for Titen by editing one line of MCP config. **Nothing on titen.dev says so**, which means the substitution play currently has no discovery path.

## What is missing

`titen-web/scripts/check-docs.mjs:338` extracts documented tools with `/"(titen_[a-z_]+)"/g`. That pattern matches only the nine native tools, so the nine compatibility names pass the gate by being invisible to it ra

[Read the thread](https://github.com/RamaAditya49/titen/issues/285) · 2026-08-07 · closed · 1 comment

### S2 — Be a drop-in for `@modelcontextprotocol/server-memory`: same nine tools, same `memory.json`

**S2 of the [substitution and write-hygiene plan](https://github.com/RamaAditya49/titen/blob/main/docs/plans/active/2026-08-06-substitution-and-write-hygiene.md).** Effort: days.

## Problem

441,501 downloads/month go to a server Anthropic's own README calls "an educational reference implementation, not production-ready software", which we measured at recall@1 0.050 — the only non-noise gap in our entire table, against nulls everywhere else. Those users cannot switch, because switching means le

[Read the thread](https://github.com/RamaAditya49/titen/issues/279) · 2026-08-06 · closed · 1 comment

### S1 — Zero-config local mode: `npx titen-memory mcp` with no server, no org, no key

**S1 of the [substitution and write-hygiene plan](https://github.com/RamaAditya49/titen/blob/main/docs/plans/active/2026-08-06-substitution-and-write-hygiene.md).** Effort: days.

## Problem

To try Titen at all you must run a server, bootstrap an org, and hold an API key. The incumbent it beats 18x on recall@1 is one `npx` line with zero configuration. Titen currently asks for strictly more setup than the thing it outperforms, so no measured advantage can ever reach a user.

## Spec

`npx titen

[Read the thread](https://github.com/RamaAditya49/titen/issues/278) · 2026-08-06 · closed · 1 comment

### Add a hard result-count parameter (top_k) to POST /v1/context/compile

**Label this a titen-memory capability gap, not a defect.**

### Environment
- titen-memory 0.5.7, `POST /v1/context/compile`, `max_tokens=32000`, `max_candidates=200`

### Reproduction
Any compile call. There is no `top_k` (or `limit`) parameter on the request. The only levers are `max_tokens` and `max_candidates`.

### Observed
The only retrieval surface is a token-budgeted context pack. To evaluate or compare it at a fixed k, or to bound what a caller receives, the client must truncate `items

[Read the thread](https://github.com/RamaAditya49/titen/issues/229) · 2026-08-04 · closed · 1 comment

### version.json advertises plugin 0.1.0 while the published plugin is 0.2.0, and links release notes for the wrong version

`titen version --check` is documented as the single networked version check, and it reads `https://titen.dev/version.json`. Its `plugin` block is stale and its notes link points at an unrelated release.

**Reproduction**
```bash
curl -s https://titen.dev/version.json
# {
#   "cli":    { "version": "0.5.7", "released_at": "2026-08-01", "notes": "https://titen.dev/releases/0.5.7" },
#   "plugin": { "version": "0.1.0", "released_at": "2026-07-31", "notes": "https://titen.dev/releases/0.4.0" }
# }
`

[Read the thread](https://github.com/RamaAditya49/titen/issues/221) · 2026-08-04 · closed · 1 comment

### [P2] docs: align enrichment state and external scheduler instructions

## Summary

Exact clean candidate `2854b7e176e6fe676ec9a21d9ec84db78d8d4628` implements opt-in automatic enrichment, but several repository and deployment documents still describe it as unimplemented or omit the drain required by an externally owned scheduler.

## Evidence

Current-state contradictions on that commit:

- `AGENTS.md:28-32` still describes the repository as the earlier direct-memory stage.
- `deploy/README.md:121-123` says extraction and consolidation are not implemented.
- `docs/

[Read the thread](https://github.com/RamaAditya49/titen/issues/175) · 2026-07-31 · closed · 0 comments

### [P0] bug: enrichment pre-leases a serial batch until later jobs lose their leases

## Severity

P0 reliability and replacement blocker for automatic memory management.

## Context

The current local implementation for #136 leases an entire enrichment batch at
one timestamp, then performs provider calls and commits serially. This is not
yet shipped in `titen-memory@0.3.0`; it must be fixed before the feature is
activated on Cloudflare, VPS, or a local computer.

## Deterministic reproduction

On the current #136 worktree, using a fresh temporary Bun/SQLite database and a
valid 

[Read the thread](https://github.com/RamaAditya49/titen/issues/151) · 2026-07-31 · closed · 0 comments

### bug: MCP tool schemas omit enforced enums, invert readOnly/idempotent hints, and return two different result envelopes

**Runtime:** Shared core (`/mcp`)
**Version:** `titen-memory@0.2.1`

The HTTP MCP transport itself is spec-correct — it echoes the client's `protocolVersion`, returns 202-with-empty-body for notifications, supports batches and `ping`, surfaces tool failures as `isError: true` readable results, and blocks cross-origin by default (`Origin: http://evil.example` → `403 Cross-origin MCP requests are not allowed.`). The tool *schemas* are the weak part.

## 1. Published schemas omit enums the API enfo

[Read the thread](https://github.com/RamaAditya49/titen/issues/98) · 2026-07-31 · closed · 0 comments

### bug: project_id requires an opaque id with no MCP way to resolve one, and rejects owner/repo with a bare 404

**Runtime:** Shared core
**Version:** `titen-memory@0.2.1`

## What happened

`project_id` accepts only an opaque `project_…` id. A human reference such as `owner/repo` fails with a bare 404 that names neither the field nor the reason:

```
observe({project_id:"ramaaditya49/titen"})              -> 404 NOT_FOUND  "Resource was not found."
resolveProject("ramaaditya49/titen")                    -> 404 NOT_FOUND  "Resource was not found."
resolveProject("ramaaditya49/titen", true)              -> 

[Read the thread](https://github.com/RamaAditya49/titen/issues/91) · 2026-07-31 · closed · 0 comments

The remaining reports are on [the project's issue tracker](https://github.com/RamaAditya49/titen/issues).
