Skip to content

Commit 87e6f38

Browse files
authored
Merge pull request #2317 from MemPalace/develop
Release v3.8.0 — promote develop to main
2 parents 359c579 + 4bc0c43 commit 87e6f38

69 files changed

Lines changed: 7534 additions & 437 deletions

Some content is hidden

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

.antigravity-plugin/skills/mempalace-recall/SKILL.md

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,11 @@ and violates MemPalace's "memory should feel instant" budget.
6565
5. **After a substantive session**, record continuity with
6666
`mempalace_diary_write` (background hooks may already do this — do not
6767
double-file).
68-
6. **When a fact changes**, call `mempalace_kg_invalidate` on the old
69-
fact, then `mempalace_kg_add` for the new one.
68+
6. **When a fact changes**, choose the operation that preserves temporal
69+
history: use `mempalace_kg_supersede` for single-valued replacements
70+
(model, employer, owner, address, current status),
71+
`mempalace_kg_invalidate` for facts that ended without replacement,
72+
and `mempalace_kg_add` for independent/coexisting facts.
7073

7174
The full canonical protocol — shared verbatim with the Antigravity
7275
recall rule and the other integrations — lives in
@@ -78,6 +81,7 @@ recall rule and the other integrations — lives in
7881
|---|---|
7982
| Find any memory by meaning | `mempalace_search` (start here) |
8083
| Relational / time-bound facts about an entity | `mempalace_kg_query` |
84+
| Replace a single-valued fact | `mempalace_kg_supersede` |
8185
| The chronological story of an entity | `mempalace_kg_timeline` |
8286
| Recent session continuity | `mempalace_diary_read` |
8387
| Which wings / rooms exist (scope unknown) | `mempalace_list_wings`, `mempalace_list_rooms` |
@@ -97,8 +101,9 @@ question — not a system prompt or pasted conversation) plus optional
97101
installer `hooks/antigravity/install.sh`). Do not silently fall back
98102
to guessing from model memory.
99103
- **Stale or conflicting facts.** Prefer the knowledge graph's
100-
time-valid answer; if a fact has changed, invalidate the old one and
101-
add the new one rather than overwriting context silently.
104+
time-valid answer. Use `mempalace_kg_supersede` for single-valued replacements,
105+
`mempalace_kg_invalidate` for facts that ended without replacement,
106+
and `mempalace_kg_add` for independent/coexisting facts.
102107

103108
## Anti-patterns — never do these
104109

.claude-plugin/marketplace.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"name": "mempalace",
1010
"source": "./.claude-plugin",
1111
"description": "AI memory system — mine projects and conversations into a searchable palace. 36 MCP tools, auto-save hooks, guided setup.",
12-
"version": "3.7.1",
12+
"version": "3.8.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.7.1",
3+
"version": "3.8.0",
44
"description": "Give your AI a memory — mine projects and conversations into a searchable palace. 36 MCP tools, auto-save hooks, and guided setup.",
55
"author": {
66
"name": "milla-jovovich"

.claude-plugin/skills/mempalace-recall/SKILL.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,10 @@ a variable, fixing a typo). Recall is question-driven, not reflexive.
4444
stored content.
4545
4. After a substantive session, record continuity with
4646
`mempalace_diary_write` (skip if a background hook already saved).
47-
5. When a fact changes: `mempalace_kg_invalidate` the old fact, then
48-
`mempalace_kg_add` the new one.
47+
5. When a fact changes: use `mempalace_kg_supersede` for
48+
single-valued replacements, `mempalace_kg_invalidate` for facts that
49+
ended without replacement, and `mempalace_kg_add` for
50+
independent/coexisting facts.
4951

5052
## Unhappy paths
5153

@@ -61,7 +63,9 @@ a variable, fixing a typo). Recall is question-driven, not reflexive.
6163
--archive-existing --yes`), not re-mine, which drops MCP-added drawers
6264
and diary entries (#1843). Do not repair in-process.
6365
- **Conflicting facts** — trust the knowledge graph's time-valid answer;
64-
invalidate-then-add rather than overwriting silently.
66+
use `mempalace_kg_supersede` for single-valued replacements,
67+
`mempalace_kg_invalidate` for facts that ended without replacement,
68+
and `mempalace_kg_add` for independent/coexisting facts.
6569

6670
The canonical protocol, shared across all MemPalace integrations, lives
6771
in `integrations/shared/recall-protocol.md`.

.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.7.1",
3+
"version": "3.8.0",
44
"description": "Give your AI a memory — mine projects and conversations into a searchable palace. 36 MCP tools, auto-save hooks, and guided setup.",
55
"author": {
66
"name": "milla-jovovich"

.github/CODEOWNERS

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
1+
# Every owner listed here must have write access to the repository —
2+
# GitHub silently ignores a rule naming a user who does not, which
3+
# leaves the matching paths with no reviewer at all.
4+
15
# Default owners for everything
2-
* @milla-jovovich @bensig @igorls
6+
* @milla-jovovich @igorls
37

48
# Core library
5-
mempalace/ @milla-jovovich @bensig
9+
mempalace/ @milla-jovovich @igorls
610

711
# CI and workflows
8-
.github/ @bensig
12+
.github/ @igorls
913

1014
# Plugins and integrations
11-
.claude-plugin/ @bensig
12-
.codex-plugin/ @bensig
13-
integrations/ @bensig
15+
.antigravity-plugin/ @igorls
16+
.claude-plugin/ @igorls
17+
.codex-plugin/ @igorls
18+
.cursor-plugin/ @igorls
19+
integrations/ @igorls

.github/workflows/ci.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
python-version: ["3.9", "3.11", "3.13"]
1515
steps:
1616
- uses: actions/checkout@v7
17-
- uses: actions/setup-python@v6
17+
- uses: actions/setup-python@v7
1818
with:
1919
python-version: ${{ matrix.python-version }}
2020
cache: 'pip'
@@ -25,7 +25,7 @@ jobs:
2525
runs-on: windows-latest
2626
steps:
2727
- uses: actions/checkout@v7
28-
- uses: actions/setup-python@v6
28+
- uses: actions/setup-python@v7
2929
with:
3030
python-version: "3.13"
3131
cache: 'pip'
@@ -47,7 +47,7 @@ jobs:
4747
runs-on: macos-latest
4848
steps:
4949
- uses: actions/checkout@v7
50-
- uses: actions/setup-python@v6
50+
- uses: actions/setup-python@v7
5151
with:
5252
python-version: "3.13"
5353
cache: 'pip'
@@ -57,7 +57,7 @@ jobs:
5757
runs-on: ubuntu-latest
5858
steps:
5959
- uses: actions/checkout@v7
60-
- uses: actions/setup-python@v6
60+
- uses: actions/setup-python@v7
6161
with:
6262
python-version: "3.11"
6363
cache: 'pip'

.github/workflows/docker-publish.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ jobs:
7777
# do not push.
7878
- name: Log in to GHCR
7979
if: github.event_name != 'pull_request'
80-
uses: docker/login-action@v4
80+
uses: docker/login-action@v4.5.2
8181
with:
8282
registry: ${{ env.REGISTRY }}
8383
username: ${{ github.actor }}
@@ -106,6 +106,8 @@ jobs:
106106
# slow the PR check.
107107
platforms: ${{ github.event_name != 'pull_request' && 'linux/amd64,linux/arm64' || 'linux/amd64' }}
108108
push: ${{ github.event_name != 'pull_request' }}
109+
provenance: mode=max
110+
sbom: true
109111
tags: ${{ steps.meta.outputs.tags }}
110112
labels: ${{ steps.meta.outputs.labels }}
111113
cache-from: type=gha

.github/workflows/publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ jobs:
111111
fi
112112
echo "Tag $TAG matches manifest version $py_version — OK."
113113
114-
- uses: actions/setup-python@v6
114+
- uses: actions/setup-python@v7
115115
with:
116116
python-version: "3.13"
117117

.github/workflows/version-guard.yml

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ on:
1010
- '.claude-plugin/marketplace.json'
1111
- '.claude-plugin/plugin.json'
1212
- '.codex-plugin/plugin.json'
13+
- 'integrations/openclaw/SKILL.md'
1314
- '.github/workflows/version-guard.yml'
1415

1516
jobs:
@@ -27,12 +28,16 @@ jobs:
2728
marketplace_version=$(jq -r '.plugins[0].version' .claude-plugin/marketplace.json)
2829
plugin_version=$(jq -r '.version' .claude-plugin/plugin.json)
2930
codex_version=$(jq -r '.version' .codex-plugin/plugin.json)
31+
openclaw_version=$(grep -E '^version:' integrations/openclaw/SKILL.md | cut -d' ' -f2)
3032
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"
33+
{
34+
echo "py_version=$py_version"
35+
echo "pyproject_version=$pyproject_version"
36+
echo "marketplace_version=$marketplace_version"
37+
echo "plugin_version=$plugin_version"
38+
echo "codex_version=$codex_version"
39+
echo "openclaw_version=$openclaw_version"
40+
} >> "$GITHUB_OUTPUT"
3641
3742
{
3843
echo "## Detected versions"
@@ -44,6 +49,7 @@ jobs:
4449
echo "| .claude-plugin/marketplace.json | \`$marketplace_version\` |"
4550
echo "| .claude-plugin/plugin.json | \`$plugin_version\` |"
4651
echo "| .codex-plugin/plugin.json | \`$codex_version\` |"
52+
echo "| integrations/openclaw/SKILL.md | \`$openclaw_version\` |"
4753
} >> "$GITHUB_STEP_SUMMARY"
4854
4955
- name: Verify all sources agree
@@ -53,6 +59,7 @@ jobs:
5359
MARKETPLACE: ${{ steps.versions.outputs.marketplace_version }}
5460
PLUGIN: ${{ steps.versions.outputs.plugin_version }}
5561
CODEX: ${{ steps.versions.outputs.codex_version }}
62+
OPENCLAW: ${{ steps.versions.outputs.openclaw_version }}
5663
run: |
5764
set -euo pipefail
5865
fail=0
@@ -63,11 +70,12 @@ jobs:
6370
fail=1
6471
fi
6572
}
66-
# All five must agree with each other (use version.py as the reference, per CLAUDE.md)
73+
# All six must agree with each other (use version.py as the reference, per CLAUDE.md)
6774
check "pyproject.toml" "$PYPROJECT" "$PY"
6875
check ".claude-plugin/marketplace.json" "$MARKETPLACE" "$PY"
6976
check ".claude-plugin/plugin.json" "$PLUGIN" "$PY"
7077
check ".codex-plugin/plugin.json" "$CODEX" "$PY"
78+
check "integrations/openclaw/SKILL.md" "$OPENCLAW" "$PY"
7179
exit $fail
7280
7381
- name: Verify tag matches manifest (tag pushes only)
@@ -94,7 +102,7 @@ jobs:
94102
95103
if [[ "$tag_version" != "$PY" ]]; then
96104
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."
105+
echo "Bump mempalace/version.py, pyproject.toml, all plugin manifests, and the OpenClaw skill before tagging a stable release."
98106
echo "For an internal/staging tag, use a semver pre-release suffix (e.g. v${PY}-rc1)."
99107
exit 1
100108
fi

0 commit comments

Comments
 (0)