Skip to content

Commit 784b14a

Browse files
authored
Merge branch 'develop' into fix/mcp-pipx-compat
2 parents 0be2288 + 32ec74d commit 784b14a

126 files changed

Lines changed: 344963 additions & 1425 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude-plugin/marketplace.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
"name": "mempalace",
33
"owner": {
44
"name": "milla-jovovich",
5-
"url": "https://github.com/milla-jovovich"
5+
"url": "https://github.com/MemPalace"
66
},
77
"plugins": [
88
{
99
"name": "mempalace",
1010
"source": "./.claude-plugin",
1111
"description": "AI memory system — mine projects and conversations into a searchable palace. 19 MCP tools, auto-save hooks, guided setup.",
12-
"version": "3.0.14",
12+
"version": "3.3.0",
1313
"author": {
1414
"name": "milla-jovovich"
1515
}

.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "mempalace",
3-
"version": "3.0.14",
3+
"version": "3.3.0",
44
"description": "Give your AI a memory — mine projects and conversations into a searchable palace. 19 MCP tools, auto-save hooks, and guided setup.",
55
"author": {
66
"name": "milla-jovovich"

.codex-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "mempalace",
3-
"version": "3.0.14",
3+
"version": "3.3.0",
44
"description": "Give your AI a memory — mine projects and conversations into a searchable palace. 19 MCP tools, auto-save hooks, and guided setup.",
55
"author": {
66
"name": "milla-jovovich"

.devcontainer/devcontainer.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"name": "MemPalace",
3+
"image": "mcr.microsoft.com/devcontainers/python:3.11",
4+
"features": {
5+
"ghcr.io/devcontainers/features/github-cli:1": {}
6+
},
7+
"postCreateCommand": "bash .devcontainer/post-create.sh",
8+
"customizations": {
9+
"vscode": {
10+
"extensions": [
11+
"ms-python.python",
12+
"ms-python.debugpy",
13+
"charliermarsh.ruff"
14+
],
15+
"settings": {
16+
"python.defaultInterpreterPath": "/usr/local/bin/python",
17+
"python.testing.pytestEnabled": true,
18+
"python.testing.pytestArgs": ["tests/", "-v", "--ignore=tests/benchmarks"],
19+
"ruff.importStrategy": "fromEnvironment",
20+
"editor.formatOnSave": true,
21+
"editor.defaultFormatter": "charliermarsh.ruff"
22+
}
23+
}
24+
}
25+
}

.devcontainer/post-create.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
echo "=== MemPalace Dev Container Setup ==="
5+
6+
pip install -e ".[dev]"
7+
8+
# Match CI's ruff pin (pyproject only sets a floor; without this contributors
9+
# get a newer ruff locally than CI runs, causing phantom lint failures).
10+
pip install "ruff>=0.4.0,<0.5"
11+
12+
pip install pre-commit
13+
pre-commit install
14+
15+
echo ""
16+
echo "=== Verification ==="
17+
echo "python: $(python --version)"
18+
echo "pytest: $(python -m pytest --version 2>&1 | head -1)"
19+
echo "ruff: $(python -m ruff --version 2>&1 | head -1)"
20+
echo ""
21+
echo "Ready. Run: pytest tests/ -v --ignore=tests/benchmarks"
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
name: Version Guard
2+
3+
on:
4+
push:
5+
tags: ['v*']
6+
pull_request:
7+
paths:
8+
- 'pyproject.toml'
9+
- 'mempalace/version.py'
10+
- '.claude-plugin/marketplace.json'
11+
- '.claude-plugin/plugin.json'
12+
- '.codex-plugin/plugin.json'
13+
- '.github/workflows/version-guard.yml'
14+
15+
jobs:
16+
check-versions:
17+
runs-on: ubuntu-latest
18+
steps:
19+
- uses: actions/checkout@v4
20+
21+
- name: Extract versions from all sources
22+
id: versions
23+
run: |
24+
set -euo pipefail
25+
py_version=$(grep -E '^__version__' mempalace/version.py | cut -d'"' -f2)
26+
pyproject_version=$(grep -E '^version' pyproject.toml | head -1 | cut -d'"' -f2)
27+
marketplace_version=$(jq -r '.plugins[0].version' .claude-plugin/marketplace.json)
28+
plugin_version=$(jq -r '.version' .claude-plugin/plugin.json)
29+
codex_version=$(jq -r '.version' .codex-plugin/plugin.json)
30+
31+
echo "py_version=$py_version" >> "$GITHUB_OUTPUT"
32+
echo "pyproject_version=$pyproject_version" >> "$GITHUB_OUTPUT"
33+
echo "marketplace_version=$marketplace_version" >> "$GITHUB_OUTPUT"
34+
echo "plugin_version=$plugin_version" >> "$GITHUB_OUTPUT"
35+
echo "codex_version=$codex_version" >> "$GITHUB_OUTPUT"
36+
37+
{
38+
echo "## Detected versions"
39+
echo ""
40+
echo "| Source | Version |"
41+
echo "| --- | --- |"
42+
echo "| mempalace/version.py | \`$py_version\` |"
43+
echo "| pyproject.toml | \`$pyproject_version\` |"
44+
echo "| .claude-plugin/marketplace.json | \`$marketplace_version\` |"
45+
echo "| .claude-plugin/plugin.json | \`$plugin_version\` |"
46+
echo "| .codex-plugin/plugin.json | \`$codex_version\` |"
47+
} >> "$GITHUB_STEP_SUMMARY"
48+
49+
- name: Verify all sources agree
50+
env:
51+
PY: ${{ steps.versions.outputs.py_version }}
52+
PYPROJECT: ${{ steps.versions.outputs.pyproject_version }}
53+
MARKETPLACE: ${{ steps.versions.outputs.marketplace_version }}
54+
PLUGIN: ${{ steps.versions.outputs.plugin_version }}
55+
CODEX: ${{ steps.versions.outputs.codex_version }}
56+
run: |
57+
set -euo pipefail
58+
fail=0
59+
check() {
60+
local name="$1" value="$2" expected="$3"
61+
if [[ "$value" != "$expected" ]]; then
62+
echo "::error file=$name::version mismatch — expected $expected, got $value"
63+
fail=1
64+
fi
65+
}
66+
# All five must agree with each other (use version.py as the reference, per CLAUDE.md)
67+
check "pyproject.toml" "$PYPROJECT" "$PY"
68+
check ".claude-plugin/marketplace.json" "$MARKETPLACE" "$PY"
69+
check ".claude-plugin/plugin.json" "$PLUGIN" "$PY"
70+
check ".codex-plugin/plugin.json" "$CODEX" "$PY"
71+
exit $fail
72+
73+
- name: Verify tag matches manifest (tag pushes only)
74+
if: startsWith(github.ref, 'refs/tags/v')
75+
env:
76+
PY: ${{ steps.versions.outputs.py_version }}
77+
run: |
78+
set -euo pipefail
79+
tag_version="${GITHUB_REF_NAME#v}"
80+
81+
# Semver pre-release tags (v3.4.0-rc1, v1.0.0-beta.2, ...) are treated
82+
# as internal/staging and are not validated against the manifest. They
83+
# do not flow to end users via `/plugin update`, which reads the
84+
# manifest on the default branch.
85+
if [[ "$tag_version" == *-* ]]; then
86+
echo "Pre-release tag $GITHUB_REF_NAME — skipping strict manifest match."
87+
{
88+
echo ""
89+
echo "> Pre-release tag detected: \`$GITHUB_REF_NAME\`."
90+
echo "> Manifest ($PY) is not required to match. Pre-releases are not published via \`/plugin update\`."
91+
} >> "$GITHUB_STEP_SUMMARY"
92+
exit 0
93+
fi
94+
95+
if [[ "$tag_version" != "$PY" ]]; then
96+
echo "::error::tag $GITHUB_REF_NAME does not match manifest version $PY"
97+
echo "Bump mempalace/version.py, pyproject.toml, and all plugin manifests before tagging a stable release."
98+
echo "For an internal/staging tag, use a semver pre-release suffix (e.g. v${PY}-rc1)."
99+
exit 1
100+
fi
101+
echo "Tag $GITHUB_REF_NAME matches manifest version $PY"

.pre-commit-config.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
repos:
22
- repo: https://github.com/astral-sh/ruff-pre-commit
3-
rev: v0.9.0
3+
# Keep in lock-step with the ruff version pinned in .github/workflows/ci.yml
4+
# (>=0.4.0,<0.5). Using a newer rev here produces a different formatter
5+
# output than CI and breaks `ruff format --check` in the lint job.
6+
rev: v0.4.10
47
hooks:
58
- id: ruff
69
args: [--fix]

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
4141
- Add `docs/CLOSETS.md` — closet layer overview
4242
- Fix stale `milla-jovovich/*` org URLs in website and plugin manifests (#787)
4343
- Fix remaining stale org URLs in contributor docs (#808)
44+
- Rewrite `README.md` and `mempalaceofficial.com` benchmark pages to remove category-error cross-system comparisons (R@5 retrieval recall had been listed next to competitor QA accuracy under one column), remove the retracted "+34% palace boost" claim from the surfaces where it had remained, replace the `100%` Haiku-rerank headline with the honest held-out `98.4%` R@5, drop the LoCoMo `100%` top-50 row (retrieval-bypass artefact), and fix the broken `aya-thekeeper/mempal` reproduction URL (#875)
45+
- Add `docs/HISTORY.md` as the canonical home for corrections, retractions, and public notices; move the 2026-04-07 "Note from Milla & Ben" and the 2026-04-11 impostor-domain notice out of `README.md`
46+
- Add v3.3.0 reproduction result JSONLs and the deterministic `seed=42` 50/450 LongMemEval split under `benchmarks/` — every BENCHMARKS.md claim reproduces exactly
4447

4548
### Internal
4649
- Add test coverage for `mine_lock`, closets, entity metadata, BM25, and diary

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ If you're planning a significant change, open an issue first to discuss the appr
8282
- **Verbatim first**: Never summarize user content. Store exact words.
8383
- **Local first**: Everything runs on the user's machine. No cloud dependencies.
8484
- **Zero API by default**: Core features must work without any API key.
85-
- **Palace structure matters**: Wings, halls, and rooms aren't cosmetic — they drive a 34% retrieval improvement. Respect the hierarchy.
85+
- **Palace structure is scoping, not magic**: Wings, halls, and rooms act as metadata filters in the underlying vector store. They keep retrieval predictable when a palace holds many unrelated projects or people. Respect the hierarchy — but don't present it as a novel retrieval mechanism.
8686

8787
## Community
8888

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ mempalace init ~/projects/myapp
5555
```bash
5656
# Mine content into the palace
5757
mempalace mine ~/projects/myapp # project files
58-
mempalace mine ~/chats/ --mode convos # conversation exports
58+
mempalace mine ~/.claude/projects/ --mode convos # Claude Code sessions (scope with --wing per project)
5959

6060
# Search
6161
mempalace search "why did we switch to GraphQL"

0 commit comments

Comments
 (0)