[pr-tests] start: 2026-01-06T05:21:23Z
[pr-tests] repo: /xxx/OpenMemory
[pr-tests] run_dir: /xxx/OpenMemory/test-results/pr112-20260106T052123Z

============================================================
[pr-tests] Versions
============================================================
b9d003adec62f9c1fd43b85feac4003eb7aa5065
## feat/docker-first-project-scoping-mcp-update-delete...origin/feat/docker-first-project-scoping-mcp-update-delete
 M scripts/run-pr-tests.sh
Client:
 Version:           28.0.4
 API version:       1.48
 Go version:        go1.23.7
 Git commit:        b8034c0
 Built:             Tue Mar 25 15:06:09 2025
 OS/Arch:           darwin/arm64
 Context:           desktop-linux

Server: Docker Desktop 4.40.0 (187762)
 Engine:
  Version:          28.0.4
  API version:      1.48 (minimum version 1.24)
  Go version:       go1.23.7
  Git commit:       6430e49
  Built:            Tue Mar 25 15:07:18 2025
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.7.26
  GitCommit:        753481ec61c7c8955a23d6ff7bc8e4daed455734
 runc:
  Version:          1.2.5
  GitCommit:        v1.2.5-0-g59923ef
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

============================================================
[pr-tests] Node SDK (packages/openmemory-js)
============================================================
v22.21.1
10.9.4
npm warn deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm warn deprecated node-domexception@1.0.0: Use your platform's native DOMException instead
npm warn deprecated npmlog@6.0.2: This package is no longer supported.
npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm warn deprecated gauge@4.0.4: This package is no longer supported.
npm warn deprecated are-we-there-yet@3.0.1: This package is no longer supported.
npm warn deprecated @npmcli/move-file@1.1.2: This functionality has been moved to @npmcli/fs
npm warn deprecated fluent-ffmpeg@2.1.3: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

added 450 packages, and audited 451 packages in 18s

60 packages are looking for funding
  run `npm fund` for details

3 vulnerabilities (1 moderate, 2 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.
npm notice
npm notice New major version of npm available! 10.9.4 -> 11.7.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.7.0
npm notice To update run: npm install -g npm@11.7.0
npm notice

> openmemory-js@1.3.1 build
> tsc -p tsconfig.json

[DB] Using SQLite VectorStore with table: vectors

[Phase 1] Evolutionary Stability (10 Generations)
[EMBED] Advanced mode (1 calls)
[EMBED] Provider: synthetic, Tier: fast, Sector: semantic
[Vector] Storing ID: 9ef7e5f1-96fe-46c1-9de8-eed35faf11f7, Sector: semantic, Dim: 1536
[EMBED] Advanced mode (1 calls)
[EMBED] Provider: synthetic, Tier: fast, Sector: semantic
[Vector] Storing ID: ee53302b-ab0a-4e24-83be-90bb44c4a12f, Sector: semantic, Dim: 1536
[Vector] Search Sector: episodic, Found 0 rows.
[Vector] Search Sector: semantic, Found 2 rows.
[Vector] Search Sector: procedural, Found 0 rows.
[Vector] Search Sector: emotional, Found 0 rows.
[Vector] Search Sector: reflective, Found 0 rows.
[Vector] Search Sector: episodic, Found 0 rows.
[Vector] Search Sector: semantic, Found 2 rows.
[decay-2.0] regenerated/reinforced memory 9ef7e5f1-96fe-46c1-9de8-eed35faf11f7
[Vector] Search Sector: procedural, Found 0 rows.
[Vector] Search Sector: emotional, Found 0 rows.
[Vector] Search Sector: reflective, Found 0 rows.
[Vector] Search Sector: episodic, Found 0 rows.
[Vector] Search Sector: semantic, Found 2 rows.
[decay-2.0] regenerated/reinforced memory 9ef7e5f1-96fe-46c1-9de8-eed35faf11f7
[Vector] Search Sector: procedural, Found 0 rows.
[Vector] Search Sector: emotional, Found 0 rows.
[Vector] Search Sector: reflective, Found 0 rows.
[Vector] Search Sector: episodic, Found 0 rows.
[Vector] Search Sector: semantic, Found 2 rows.
[decay-2.0] regenerated/reinforced memory 9ef7e5f1-96fe-46c1-9de8-eed35faf11f7
[Vector] Search Sector: procedural, Found 0 rows.
[Vector] Search Sector: emotional, Found 0 rows.
[Vector] Search Sector: reflective, Found 0 rows.
[Vector] Search Sector: episodic, Found 0 rows.
[Vector] Search Sector: semantic, Found 2 rows.
[decay-2.0] regenerated/reinforced memory 9ef7e5f1-96fe-46c1-9de8-eed35faf11f7
[Vector] Search Sector: procedural, Found 0 rows.
[Vector] Search Sector: emotional, Found 0 rows.
[Vector] Search Sector: reflective, Found 0 rows.
 -> Generation 10 Results:
    Popular Salience: 1.0000
    Unpopular Salience: 0.4000
 -> PASS: Survival of the fittest confirmed.

[Phase 2] Boolean Metadata Logic
[decay-2.0] regenerated/reinforced memory 9ef7e5f1-96fe-46c1-9de8-eed35faf11f7
[EMBED] Advanced mode (1 calls)
[EMBED] Provider: synthetic, Tier: fast, Sector: semantic
[Vector] Storing ID: bbb8b543-94d9-4000-bad5-c3fef4be6ee7, Sector: semantic, Dim: 1536
[EMBED] Advanced mode (1 calls)
[EMBED] Provider: synthetic, Tier: fast, Sector: semantic
[Vector] Storing ID: 992b2d9b-113f-44e4-9db2-6ce5c4e10bde, Sector: semantic, Dim: 1536
[EMBED] Advanced mode (1 calls)
[EMBED] Provider: synthetic, Tier: fast, Sector: semantic
[Vector] Storing ID: 9ea7dc62-b43f-4617-8abc-bd24aa403050, Sector: semantic, Dim: 1536
[DEBUG] Memory 9ea7dc62-b43f-4617-8abc-bd24aa403050 vector length: 6144
 -> Filtering for 'work' AND 'urgent'...
[Vector] Search Sector: episodic, Found 0 rows.
[Vector] Search Sector: semantic, Found 3 rows.
[Vector] Search Sector: procedural, Found 0 rows.
[Vector] Search Sector: emotional, Found 0 rows.
[Vector] Search Sector: reflective, Found 0 rows.
 -> PASS: Metadata attributes preserved and queryable.

[Phase 3] Content Robustness
[decay-2.0] regenerated/reinforced memory 9ea7dc62-b43f-4617-8abc-bd24aa403050
[decay-2.0] regenerated/reinforced memory bbb8b543-94d9-4000-bad5-c3fef4be6ee7
[decay-2.0] regenerated/reinforced memory 992b2d9b-113f-44e4-9db2-6ce5c4e10bde
[EMBED] Advanced mode (1 calls)
[EMBED] Provider: synthetic, Tier: fast, Sector: semantic
[Vector] Storing ID: 91e07868-0687-48a3-af70-c5e3f26b6ab2, Sector: semantic, Dim: 1536
[Vector] Search Sector: episodic, Found 0 rows.
[Vector] Search Sector: semantic, Found 1 rows.
[Vector] Search Sector: procedural, Found 0 rows.
[Vector] Search Sector: emotional, Found 0 rows.
[Vector] Search Sector: reflective, Found 0 rows.
 -> HTML: Verified (Key Match)
[decay-2.0] regenerated/reinforced memory 91e07868-0687-48a3-af70-c5e3f26b6ab2
[EMBED] Advanced mode (1 calls)
[EMBED] Provider: synthetic, Tier: fast, Sector: semantic
[Vector] Storing ID: 2ce4b069-3b9d-4b39-8292-8bfd094b5bae, Sector: semantic, Dim: 1536
[Vector] Search Sector: episodic, Found 0 rows.
[Vector] Search Sector: semantic, Found 2 rows.
[Vector] Search Sector: procedural, Found 0 rows.
[Vector] Search Sector: emotional, Found 0 rows.
[Vector] Search Sector: reflective, Found 0 rows.
 -> JSON: Verified (Key Match)
[decay-2.0] regenerated/reinforced memory 2ce4b069-3b9d-4b39-8292-8bfd094b5bae
[EMBED] Advanced mode (1 calls)
[EMBED] Provider: synthetic, Tier: fast, Sector: semantic
[Vector] Storing ID: 09982795-5936-4cfa-bc82-19e13818536f, Sector: semantic, Dim: 1536
[Vector] Search Sector: episodic, Found 0 rows.
[Vector] Search Sector: semantic, Found 3 rows.
[Vector] Search Sector: procedural, Found 0 rows.
[Vector] Search Sector: emotional, Found 0 rows.
[Vector] Search Sector: reflective, Found 0 rows.
 -> Markdown: Verified (Key Match)
 -> PASS: Complex formats handled.

[OMNIBUS] ALL TESTS PASSED

============================================================
[pr-tests] Python SDK (packages/openmemory-py)
============================================================
Python 3.11.14
pip 24.0 from /usr/local/lib/python3.11/site-packages/pip (python 3.11)
Obtaining file:///repo/packages/openmemory-py
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Checking if build backend supports build_editable: started
  Checking if build backend supports build_editable: finished with status 'done'
  Getting requirements to build editable: started
  Getting requirements to build editable: finished with status 'done'
  Installing backend dependencies: started
  Installing backend dependencies: finished with status 'done'
  Preparing editable metadata (pyproject.toml): started
  Preparing editable metadata (pyproject.toml): finished with status 'done'
Collecting beautifulsoup4>=4.0 (from openmemory-py==1.3.1)
  Downloading beautifulsoup4-4.14.3-py3-none-any.whl.metadata (3.8 kB)
Collecting fastapi (from openmemory-py==1.3.1)
  Downloading fastapi-0.128.0-py3-none-any.whl.metadata (30 kB)
Collecting google-api-python-client>=2.0 (from openmemory-py==1.3.1)
  Downloading google_api_python_client-2.187.0-py3-none-any.whl.metadata (7.0 kB)
Collecting google-auth>=2.0 (from openmemory-py==1.3.1)
  Downloading google_auth-2.46.0-py3-none-any.whl.metadata (6.8 kB)
Collecting httpx (from openmemory-py==1.3.1)
  Downloading httpx-0.28.1-py3-none-any.whl.metadata (7.1 kB)
Collecting mammoth>=1.6 (from openmemory-py==1.3.1)
  Downloading mammoth-1.11.0-py2.py3-none-any.whl.metadata (26 kB)
Collecting markdownify>=0.11 (from openmemory-py==1.3.1)
  Downloading markdownify-1.2.2-py3-none-any.whl.metadata (9.9 kB)
Collecting msal>=1.0 (from openmemory-py==1.3.1)
  Downloading msal-1.34.0-py3-none-any.whl.metadata (11 kB)
Collecting notion-client>=2.0 (from openmemory-py==1.3.1)
  Downloading notion_client-2.7.0-py2.py3-none-any.whl.metadata (14 kB)
Collecting numpy (from openmemory-py==1.3.1)
  Downloading numpy-2.4.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.metadata (6.6 kB)
Collecting openai>=1.0 (from openmemory-py==1.3.1)
  Downloading openai-2.14.0-py3-none-any.whl.metadata (29 kB)
Collecting pydantic (from openmemory-py==1.3.1)
  Downloading pydantic-2.12.5-py3-none-any.whl.metadata (90 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 kB 940.4 kB/s eta 0:00:00
Collecting pygithub>=2.0 (from openmemory-py==1.3.1)
  Downloading pygithub-2.8.1-py3-none-any.whl.metadata (3.9 kB)
Collecting pypdf>=4.0 (from openmemory-py==1.3.1)
  Downloading pypdf-6.5.0-py3-none-any.whl.metadata (7.1 kB)
Collecting python-dotenv>=1.0 (from openmemory-py==1.3.1)
  Downloading python_dotenv-1.2.1-py3-none-any.whl.metadata (25 kB)
Collecting pyyaml>=6.0 (from openmemory-py==1.3.1)
  Downloading pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.metadata (2.4 kB)
Collecting uvicorn (from openmemory-py==1.3.1)
  Downloading uvicorn-0.40.0-py3-none-any.whl.metadata (6.7 kB)
Collecting black>=23.0 (from openmemory-py==1.3.1)
  Downloading black-25.12.0-py3-none-any.whl.metadata (86 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 86.4/86.4 kB 3.4 MB/s eta 0:00:00
Collecting pytest-asyncio>=0.21 (from openmemory-py==1.3.1)
  Downloading pytest_asyncio-1.3.0-py3-none-any.whl.metadata (4.1 kB)
Collecting pytest>=7.0 (from openmemory-py==1.3.1)
  Downloading pytest-9.0.2-py3-none-any.whl.metadata (7.6 kB)
Collecting soupsieve>=1.6.1 (from beautifulsoup4>=4.0->openmemory-py==1.3.1)
  Downloading soupsieve-2.8.1-py3-none-any.whl.metadata (4.6 kB)
Collecting typing-extensions>=4.0.0 (from beautifulsoup4>=4.0->openmemory-py==1.3.1)
  Downloading typing_extensions-4.15.0-py3-none-any.whl.metadata (3.3 kB)
Collecting click>=8.0.0 (from black>=23.0->openmemory-py==1.3.1)
  Downloading click-8.3.1-py3-none-any.whl.metadata (2.6 kB)
Collecting mypy-extensions>=0.4.3 (from black>=23.0->openmemory-py==1.3.1)
  Downloading mypy_extensions-1.1.0-py3-none-any.whl.metadata (1.1 kB)
Collecting packaging>=22.0 (from black>=23.0->openmemory-py==1.3.1)
  Using cached packaging-25.0-py3-none-any.whl.metadata (3.3 kB)
Collecting pathspec>=0.9.0 (from black>=23.0->openmemory-py==1.3.1)
  Using cached pathspec-1.0.0-py3-none-any.whl.metadata (12 kB)
Collecting platformdirs>=2 (from black>=23.0->openmemory-py==1.3.1)
  Downloading platformdirs-4.5.1-py3-none-any.whl.metadata (12 kB)
Collecting pytokens>=0.3.0 (from black>=23.0->openmemory-py==1.3.1)
  Downloading pytokens-0.3.0-py3-none-any.whl.metadata (2.0 kB)
Collecting httplib2<1.0.0,>=0.19.0 (from google-api-python-client>=2.0->openmemory-py==1.3.1)
  Downloading httplib2-0.31.0-py3-none-any.whl.metadata (2.2 kB)
Collecting google-auth-httplib2<1.0.0,>=0.2.0 (from google-api-python-client>=2.0->openmemory-py==1.3.1)
  Downloading google_auth_httplib2-0.3.0-py3-none-any.whl.metadata (3.1 kB)
Collecting google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0,>=1.31.5 (from google-api-python-client>=2.0->openmemory-py==1.3.1)
  Downloading google_api_core-2.28.1-py3-none-any.whl.metadata (3.3 kB)
Collecting uritemplate<5,>=3.0.1 (from google-api-python-client>=2.0->openmemory-py==1.3.1)
  Downloading uritemplate-4.2.0-py3-none-any.whl.metadata (2.6 kB)
Collecting cachetools<7.0,>=2.0.0 (from google-auth>=2.0->openmemory-py==1.3.1)
  Downloading cachetools-6.2.4-py3-none-any.whl.metadata (5.6 kB)
Collecting pyasn1-modules>=0.2.1 (from google-auth>=2.0->openmemory-py==1.3.1)
  Downloading pyasn1_modules-0.4.2-py3-none-any.whl.metadata (3.5 kB)
Collecting rsa<5,>=3.1.4 (from google-auth>=2.0->openmemory-py==1.3.1)
  Downloading rsa-4.9.1-py3-none-any.whl.metadata (5.6 kB)
Collecting cobble<0.2,>=0.1.3 (from mammoth>=1.6->openmemory-py==1.3.1)
  Downloading cobble-0.1.4-py3-none-any.whl.metadata (2.7 kB)
Collecting six<2,>=1.15 (from markdownify>=0.11->openmemory-py==1.3.1)
  Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)
Collecting requests<3,>=2.0.0 (from msal>=1.0->openmemory-py==1.3.1)
  Downloading requests-2.32.5-py3-none-any.whl.metadata (4.9 kB)
Collecting PyJWT<3,>=1.0.0 (from PyJWT[crypto]<3,>=1.0.0->msal>=1.0->openmemory-py==1.3.1)
  Downloading PyJWT-2.10.1-py3-none-any.whl.metadata (4.0 kB)
Collecting cryptography<49,>=2.5 (from msal>=1.0->openmemory-py==1.3.1)
  Downloading cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl.metadata (5.7 kB)
Collecting anyio (from httpx->openmemory-py==1.3.1)
  Downloading anyio-4.12.0-py3-none-any.whl.metadata (4.3 kB)
Collecting certifi (from httpx->openmemory-py==1.3.1)
  Downloading certifi-2026.1.4-py3-none-any.whl.metadata (2.5 kB)
Collecting httpcore==1.* (from httpx->openmemory-py==1.3.1)
  Downloading httpcore-1.0.9-py3-none-any.whl.metadata (21 kB)
Collecting idna (from httpx->openmemory-py==1.3.1)
  Downloading idna-3.11-py3-none-any.whl.metadata (8.4 kB)
Collecting h11>=0.16 (from httpcore==1.*->httpx->openmemory-py==1.3.1)
  Downloading h11-0.16.0-py3-none-any.whl.metadata (8.3 kB)
Collecting distro<2,>=1.7.0 (from openai>=1.0->openmemory-py==1.3.1)
  Downloading distro-1.9.0-py3-none-any.whl.metadata (6.8 kB)
Collecting jiter<1,>=0.10.0 (from openai>=1.0->openmemory-py==1.3.1)
  Downloading jiter-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.metadata (5.2 kB)
Collecting sniffio (from openai>=1.0->openmemory-py==1.3.1)
  Downloading sniffio-1.3.1-py3-none-any.whl.metadata (3.9 kB)
Collecting tqdm>4 (from openai>=1.0->openmemory-py==1.3.1)
  Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.7/57.7 kB 3.5 MB/s eta 0:00:00
Collecting annotated-types>=0.6.0 (from pydantic->openmemory-py==1.3.1)
  Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)
Collecting pydantic-core==2.41.5 (from pydantic->openmemory-py==1.3.1)
  Downloading pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.metadata (7.3 kB)
Collecting typing-inspection>=0.4.2 (from pydantic->openmemory-py==1.3.1)
  Downloading typing_inspection-0.4.2-py3-none-any.whl.metadata (2.6 kB)
Collecting pynacl>=1.4.0 (from pygithub>=2.0->openmemory-py==1.3.1)
  Downloading pynacl-1.6.2-cp38-abi3-manylinux_2_34_aarch64.whl.metadata (10.0 kB)
Collecting urllib3>=1.26.0 (from pygithub>=2.0->openmemory-py==1.3.1)
  Downloading urllib3-2.6.2-py3-none-any.whl.metadata (6.6 kB)
Collecting iniconfig>=1.0.1 (from pytest>=7.0->openmemory-py==1.3.1)
  Downloading iniconfig-2.3.0-py3-none-any.whl.metadata (2.5 kB)
Collecting pluggy<2,>=1.5 (from pytest>=7.0->openmemory-py==1.3.1)
  Using cached pluggy-1.6.0-py3-none-any.whl.metadata (4.8 kB)
Collecting pygments>=2.7.2 (from pytest>=7.0->openmemory-py==1.3.1)
  Downloading pygments-2.19.2-py3-none-any.whl.metadata (2.5 kB)
Collecting starlette<0.51.0,>=0.40.0 (from fastapi->openmemory-py==1.3.1)
  Downloading starlette-0.50.0-py3-none-any.whl.metadata (6.3 kB)
Collecting annotated-doc>=0.0.2 (from fastapi->openmemory-py==1.3.1)
  Downloading annotated_doc-0.0.4-py3-none-any.whl.metadata (6.6 kB)
Collecting cffi>=2.0.0 (from cryptography<49,>=2.5->msal>=1.0->openmemory-py==1.3.1)
  Downloading cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.metadata (2.6 kB)
Collecting googleapis-common-protos<2.0.0,>=1.56.2 (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0,>=1.31.5->google-api-python-client>=2.0->openmemory-py==1.3.1)
  Downloading googleapis_common_protos-1.72.0-py3-none-any.whl.metadata (9.4 kB)
Collecting protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<7.0.0,>=3.19.5 (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0,>=1.31.5->google-api-python-client>=2.0->openmemory-py==1.3.1)
  Downloading protobuf-6.33.2-cp39-abi3-manylinux2014_aarch64.whl.metadata (593 bytes)
Collecting proto-plus<2.0.0,>=1.22.3 (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0,>=1.31.5->google-api-python-client>=2.0->openmemory-py==1.3.1)
  Downloading proto_plus-1.27.0-py3-none-any.whl.metadata (2.2 kB)
Collecting pyparsing<4,>=3.0.4 (from httplib2<1.0.0,>=0.19.0->google-api-python-client>=2.0->openmemory-py==1.3.1)
  Downloading pyparsing-3.3.1-py3-none-any.whl.metadata (5.6 kB)
Collecting pyasn1<0.7.0,>=0.6.1 (from pyasn1-modules>=0.2.1->google-auth>=2.0->openmemory-py==1.3.1)
  Downloading pyasn1-0.6.1-py3-none-any.whl.metadata (8.4 kB)
Collecting charset_normalizer<4,>=2 (from requests<3,>=2.0.0->msal>=1.0->openmemory-py==1.3.1)
  Downloading charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.metadata (37 kB)
Collecting pycparser (from cffi>=2.0.0->cryptography<49,>=2.5->msal>=1.0->openmemory-py==1.3.1)
  Downloading pycparser-2.23-py3-none-any.whl.metadata (993 bytes)
Downloading beautifulsoup4-4.14.3-py3-none-any.whl (107 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 107.7/107.7 kB 4.2 MB/s eta 0:00:00
Downloading black-25.12.0-py3-none-any.whl (206 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 206.2/206.2 kB 5.1 MB/s eta 0:00:00
Downloading google_api_python_client-2.187.0-py3-none-any.whl (14.6 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.6/14.6 MB 13.2 MB/s eta 0:00:00
Downloading google_auth-2.46.0-py3-none-any.whl (233 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 233.7/233.7 kB 9.4 MB/s eta 0:00:00
Downloading mammoth-1.11.0-py2.py3-none-any.whl (54 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 54.8/54.8 kB 9.6 MB/s eta 0:00:00
Downloading markdownify-1.2.2-py3-none-any.whl (15 kB)
Downloading msal-1.34.0-py3-none-any.whl (116 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.0/117.0 kB 13.5 MB/s eta 0:00:00
Downloading notion_client-2.7.0-py2.py3-none-any.whl (16 kB)
Downloading httpx-0.28.1-py3-none-any.whl (73 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 73.5/73.5 kB 4.0 MB/s eta 0:00:00
Downloading httpcore-1.0.9-py3-none-any.whl (78 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.8/78.8 kB 13.3 MB/s eta 0:00:00
Downloading openai-2.14.0-py3-none-any.whl (1.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 10.8 MB/s eta 0:00:00
Downloading pydantic-2.12.5-py3-none-any.whl (463 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 463.6/463.6 kB 11.4 MB/s eta 0:00:00
Downloading pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.9/1.9 MB 10.2 MB/s eta 0:00:00
Downloading pygithub-2.8.1-py3-none-any.whl (432 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 432.7/432.7 kB 9.1 MB/s eta 0:00:00
Downloading pypdf-6.5.0-py3-none-any.whl (329 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 329.6/329.6 kB 12.4 MB/s eta 0:00:00
Downloading pytest-9.0.2-py3-none-any.whl (374 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 374.8/374.8 kB 11.7 MB/s eta 0:00:00
Downloading pytest_asyncio-1.3.0-py3-none-any.whl (15 kB)
Downloading python_dotenv-1.2.1-py3-none-any.whl (21 kB)
Downloading pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (775 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 775.6/775.6 kB 10.5 MB/s eta 0:00:00
Downloading fastapi-0.128.0-py3-none-any.whl (103 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 103.1/103.1 kB 8.5 MB/s eta 0:00:00
Downloading numpy-2.4.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (14.7 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.7/14.7 MB 10.0 MB/s eta 0:00:00
Downloading uvicorn-0.40.0-py3-none-any.whl (68 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 68.5/68.5 kB 8.7 MB/s eta 0:00:00
Downloading annotated_doc-0.0.4-py3-none-any.whl (5.3 kB)
Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)
Downloading anyio-4.12.0-py3-none-any.whl (113 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 113.4/113.4 kB 22.3 MB/s eta 0:00:00
Downloading cachetools-6.2.4-py3-none-any.whl (11 kB)
Downloading click-8.3.1-py3-none-any.whl (108 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 108.3/108.3 kB 10.8 MB/s eta 0:00:00
Downloading cobble-0.1.4-py3-none-any.whl (4.0 kB)
Downloading cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl (4.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3/4.3 MB 10.1 MB/s eta 0:00:00
Downloading distro-1.9.0-py3-none-any.whl (20 kB)
Downloading google_api_core-2.28.1-py3-none-any.whl (173 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 173.7/173.7 kB 9.1 MB/s eta 0:00:00
Downloading google_auth_httplib2-0.3.0-py3-none-any.whl (9.5 kB)
Downloading h11-0.16.0-py3-none-any.whl (37 kB)
Downloading httplib2-0.31.0-py3-none-any.whl (91 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 91.1/91.1 kB 9.1 MB/s eta 0:00:00
Downloading idna-3.11-py3-none-any.whl (71 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 71.0/71.0 kB 13.3 MB/s eta 0:00:00
Downloading iniconfig-2.3.0-py3-none-any.whl (7.5 kB)
Downloading jiter-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (351 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 351.9/351.9 kB 10.1 MB/s eta 0:00:00
Downloading mypy_extensions-1.1.0-py3-none-any.whl (5.0 kB)
Using cached packaging-25.0-py3-none-any.whl (66 kB)
Using cached pathspec-1.0.0-py3-none-any.whl (54 kB)
Downloading platformdirs-4.5.1-py3-none-any.whl (18 kB)
Using cached pluggy-1.6.0-py3-none-any.whl (20 kB)
Downloading pyasn1_modules-0.4.2-py3-none-any.whl (181 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 181.3/181.3 kB 11.2 MB/s eta 0:00:00
Downloading pygments-2.19.2-py3-none-any.whl (1.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 10.6 MB/s eta 0:00:00
Downloading PyJWT-2.10.1-py3-none-any.whl (22 kB)
Downloading pynacl-1.6.2-cp38-abi3-manylinux_2_34_aarch64.whl (818 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 818.3/818.3 kB 12.4 MB/s eta 0:00:00
Downloading pytokens-0.3.0-py3-none-any.whl (12 kB)
Downloading requests-2.32.5-py3-none-any.whl (64 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 64.7/64.7 kB 12.1 MB/s eta 0:00:00
Downloading certifi-2026.1.4-py3-none-any.whl (152 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 152.9/152.9 kB 8.0 MB/s eta 0:00:00
Downloading rsa-4.9.1-py3-none-any.whl (34 kB)
Downloading six-1.17.0-py2.py3-none-any.whl (11 kB)
Downloading soupsieve-2.8.1-py3-none-any.whl (36 kB)
Downloading starlette-0.50.0-py3-none-any.whl (74 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 74.0/74.0 kB 9.6 MB/s eta 0:00:00
Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.5/78.5 kB 13.6 MB/s eta 0:00:00
Downloading typing_extensions-4.15.0-py3-none-any.whl (44 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 44.6/44.6 kB 5.5 MB/s eta 0:00:00
Downloading typing_inspection-0.4.2-py3-none-any.whl (14 kB)
Downloading uritemplate-4.2.0-py3-none-any.whl (11 kB)
Downloading urllib3-2.6.2-py3-none-any.whl (131 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 131.2/131.2 kB 13.9 MB/s eta 0:00:00
Downloading sniffio-1.3.1-py3-none-any.whl (10 kB)
Downloading cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (216 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 216.5/216.5 kB 15.1 MB/s eta 0:00:00
Downloading charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (147 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 147.3/147.3 kB 20.5 MB/s eta 0:00:00
Downloading googleapis_common_protos-1.72.0-py3-none-any.whl (297 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 297.5/297.5 kB 9.6 MB/s eta 0:00:00
Downloading proto_plus-1.27.0-py3-none-any.whl (50 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 50.2/50.2 kB 7.6 MB/s eta 0:00:00
Downloading protobuf-6.33.2-cp39-abi3-manylinux2014_aarch64.whl (324 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 324.5/324.5 kB 10.1 MB/s eta 0:00:00
Downloading pyasn1-0.6.1-py3-none-any.whl (83 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 83.1/83.1 kB 7.5 MB/s eta 0:00:00
Downloading pyparsing-3.3.1-py3-none-any.whl (121 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 121.8/121.8 kB 8.3 MB/s eta 0:00:00
Downloading pycparser-2.23-py3-none-any.whl (118 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 118.1/118.1 kB 16.7 MB/s eta 0:00:00
Checking if build backend supports build_editable: started
Checking if build backend supports build_editable: finished with status 'done'
Building wheels for collected packages: openmemory-py
  Building editable for openmemory-py (pyproject.toml): started
  Building editable for openmemory-py (pyproject.toml): finished with status 'done'
  Created wheel for openmemory-py: filename=openmemory_py-1.3.1-py2.py3-none-any.whl size=1203 sha256=b59922a926b0175077b1e26ade9a2cbdaa59c329f3a38d2424938f6fde9f4220
  Stored in directory: /tmp/pip-ephem-wheel-cache-mcns2roz/wheels/0f/03/3e/8a1ff5278bb8554675c14643e50d03c080934a971fe2e2a0cf
Successfully built openmemory-py
Installing collected packages: urllib3, uritemplate, typing-extensions, tqdm, soupsieve, sniffio, six, pyyaml, pytokens, python-dotenv, pypdf, pyparsing, PyJWT, pygments, pycparser, pyasn1, protobuf, pluggy, platformdirs, pathspec, packaging, numpy, mypy-extensions, jiter, iniconfig, idna, h11, distro, cobble, click, charset_normalizer, certifi, cachetools, annotated-types, annotated-doc, uvicorn, typing-inspection, rsa, requests, pytest, pydantic-core, pyasn1-modules, proto-plus, mammoth, httplib2, httpcore, googleapis-common-protos, cffi, black, beautifulsoup4, anyio, starlette, pytest-asyncio, pynacl, pydantic, markdownify, httpx, google-auth, cryptography, openai, notion-client, google-auth-httplib2, google-api-core, fastapi, pygithub, msal, google-api-python-client, openmemory-py
Successfully installed PyJWT-2.10.1 annotated-doc-0.0.4 annotated-types-0.7.0 anyio-4.12.0 beautifulsoup4-4.14.3 black-25.12.0 cachetools-6.2.4 certifi-2026.1.4 cffi-2.0.0 charset_normalizer-3.4.4 click-8.3.1 cobble-0.1.4 cryptography-46.0.3 distro-1.9.0 fastapi-0.128.0 google-api-core-2.28.1 google-api-python-client-2.187.0 google-auth-2.46.0 google-auth-httplib2-0.3.0 googleapis-common-protos-1.72.0 h11-0.16.0 httpcore-1.0.9 httplib2-0.31.0 httpx-0.28.1 idna-3.11 iniconfig-2.3.0 jiter-0.12.0 mammoth-1.11.0 markdownify-1.2.2 msal-1.34.0 mypy-extensions-1.1.0 notion-client-2.7.0 numpy-2.4.0 openai-2.14.0 openmemory-py-1.3.1 packaging-25.0 pathspec-1.0.0 platformdirs-4.5.1 pluggy-1.6.0 proto-plus-1.27.0 protobuf-6.33.2 pyasn1-0.6.1 pyasn1-modules-0.4.2 pycparser-2.23 pydantic-2.12.5 pydantic-core-2.41.5 pygithub-2.8.1 pygments-2.19.2 pynacl-1.6.2 pyparsing-3.3.1 pypdf-6.5.0 pytest-9.0.2 pytest-asyncio-1.3.0 python-dotenv-1.2.1 pytokens-0.3.0 pyyaml-6.0.3 requests-2.32.5 rsa-4.9.1 six-1.17.0 sniffio-1.3.1 soupsieve-2.8.1 starlette-0.50.0 tqdm-4.67.1 typing-extensions-4.15.0 typing-inspection-0.4.2 uritemplate-4.2.0 urllib3-2.6.2 uvicorn-0.40.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

[notice] A new release of pip is available: 24.0 -> 25.3
[notice] To update, run: pip install --upgrade pip
============================= test session starts ==============================
platform linux -- Python 3.11.14, pytest-9.0.2, pluggy-1.6.0 -- /usr/local/bin/python3.11
cachedir: .pytest_cache
rootdir: /repo/packages/openmemory-py
configfile: pyproject.toml
plugins: asyncio-1.3.0, anyio-4.12.0
asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
collecting ... collected 3 items

tests/test_omnibus.py::test_evolutionary_stability PASSED                [ 33%]
tests/test_omnibus.py::test_boolean_metadata_logic PASSED                [ 66%]
tests/test_omnibus.py::test_content_robustness PASSED                    [100%]

============================== 3 passed in 0.37s ===============================

============================================================
[pr-tests] Docker Build (packages/openmemory-js/Dockerfile)
============================================================
#0 building with "desktop-linux" instance using docker driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 2.29kB done
#1 DONE 0.0s

#2 [internal] load metadata for docker.io/library/node:20-alpine
#2 DONE 0.8s

#3 [internal] load .dockerignore
#3 transferring context: 2B done
#3 DONE 0.0s

#4 [builder  1/10] FROM docker.io/library/node:20-alpine@sha256:658d0f63e501824d6c23e06d4bb95c71e7d704537c9d9272f488ac03a370d448
#4 DONE 0.0s

#5 [internal] load build context
#5 transferring context: 5.55kB 0.2s done
#5 DONE 0.2s

#6 [builder  5/10] COPY package*.json ./
#6 CACHED

#7 [production 7/8] COPY package.json ./
#7 CACHED

#8 [builder  9/10] RUN bun run build
#8 CACHED

#9 [builder  6/10] RUN bun install --frozen-lockfile
#9 CACHED

#10 [builder  8/10] COPY tsconfig.json ./
#10 CACHED

#11 [builder  2/10] WORKDIR /app
#11 CACHED

#12 [builder  4/10] RUN curl -fsSL https://bun.sh/install | bash  && mv /root/.bun /opt/bun  && ln -s /opt/bun/bin/bun /usr/local/bin/bun
#12 CACHED

#13 [production 6/8] COPY --from=builder /app/dist ./dist/
#13 CACHED

#14 [builder  7/10] COPY src/ ./src/
#14 CACHED

#15 [production 5/8] COPY --from=builder /app/node_modules ./node_modules/
#15 CACHED

#16 [builder 10/10] RUN npm prune --omit=dev
#16 CACHED

#17 [builder  3/10] RUN apk add --no-cache python3 make g++ curl bash
#17 CACHED

#18 [production 3/8] RUN apk add --no-cache tzdata
#18 CACHED

#19 [production 4/8] RUN addgroup -g 1001 -S appgroup  && adduser -u 1001 -S appuser -G appgroup
#19 CACHED

#20 [production 8/8] RUN mkdir -p /data  && chown -R appuser:appgroup /data /app  && chmod -R go-w /app
#20 CACHED

#21 exporting to image
#21 exporting layers done
#21 writing image sha256:e5ce5fcb65e121750990759b4fb90da972e75063c477a66739d7a9543f463076 done
#21 naming to docker.io/library/openmemory-prtest:local done
#21 DONE 0.0s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/6lb54wdf5q5bclprl0syinlmz

============================================================
[pr-tests] MCP/HTTP Smoke (Docker image)
============================================================

============================================================
[pr-tests] Run container for MCP/HTTP smoke (port 18082 -> 18080)
============================================================
[pr-tests] building/running with api_key=pr112-test-key default_user=pr112-user

============================================================
[pr-tests] Wait for /health
============================================================
[pr-tests] ✅ healthy: http://127.0.0.1:18082

============================================================
[pr-tests] Auth required (HTTP)
============================================================
[pr-tests] ✅ GET /memory/all without key: HTTP 401
[pr-tests] ✅ GET /memory/all with key: HTTP 200

============================================================
[pr-tests] HTTP CRUD: add/get/patch/delete
============================================================
[pr-tests] http memory id: 5f1aca76-1b6b-4068-a8a6-ec6a5758af02
[pr-tests] ✅ HTTP PATCH updated content
[pr-tests] ✅ GET /memory/:id after delete: HTTP 404

============================================================
[pr-tests] MCP transport: GET /mcp (SSE headers)
============================================================
curl: (28) Operation timed out after 2002 milliseconds with 0 bytes received
ok
[pr-tests] ✅ SSE headers OK

============================================================
[pr-tests] MCP initialize + tools/list
============================================================
[pr-tests] mcp-session-id: (none; stateless transport)
ok
[pr-tests] ✅ tools/list includes update/delete

============================================================
[pr-tests] MCP: store (default user_id from env) -> get -> update -> get -> reinforce -> delete -> get
============================================================
[pr-tests] stored mcp id: 3872378d-8561-4ac4-bc6b-bfacc31d320f (user_id='pr112-user')
[pr-tests] ✅ MCP store used default user_id
ok
[pr-tests] ✅ MCP get returned full content

============================================================
[pr-tests] MCP: large content is not truncated (OM_USE_SUMMARY_ONLY=false)
============================================================
ok
[pr-tests] ✅ MCP get preserved big content tail
ok
[pr-tests] ✅ MCP update applied (content/tags/metadata)
[pr-tests] ✅ MCP delete removed memory

============================================================
[pr-tests] MCP transport: DELETE /mcp closes session
============================================================
[pr-tests] ✅ DELETE /mcp returned HTTP 200

============================================================
[pr-tests] Persistence: restart container keeps stored memories
============================================================
[pr-tests] ✅ GET /memory/:id after restart (persistence): HTTP 200
ok
[pr-tests] ✅ persistence content verified

============================================================
[pr-tests] Write Markdown report
============================================================
[pr-tests] ✅ report: /xxx/OpenMemory/test-results/PR112-validation-report.md

============================================================
[pr-tests] Done
============================================================
[pr-tests] ✅ all checks passed
[pr-tests] log: /xxx/OpenMemory/test-results/pr112-20260106T052123Z/run.log
[pr-tests] report: /xxx/OpenMemory/test-results/PR112-validation-report.md
