docs: add RELEASING.md with mempalace-mcp pre-release check#1142
docs: add RELEASING.md with mempalace-mcp pre-release check#1142jphein wants to merge 2 commits intoMemPalace:developfrom
Conversation
PR filed 2026-04-23 fulfilling MemPalace#1093's release-checklist proposal after @bensig's 2026-04-23 email accept. 4-file grep form with scope note offering to trim to narrow 2-file form if desired. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
There was a problem hiding this comment.
Pull request overview
Adds a release checklist doc to prevent shipping a broken mempalace-mcp console script / plugin config mismatch (the v3.3.2 regression tracked in #1093).
Changes:
- Introduces
docs/RELEASING.mdwith a pre-release grep check verifyingmempalace-mcpis referenced consistently acrosspyproject.tomland plugin configs. - Documents the expected “healthy develop” grep output and a stop condition when the entry point is missing.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| ```bash | ||
| grep -rn mempalace-mcp pyproject.toml .claude-plugin .codex-plugin | ||
| ``` | ||
|
|
||
| Expected on a healthy `develop` (post-[#340](https://github.com/MemPalace/mempalace/pull/340)): | ||
|
|
||
| ``` | ||
| pyproject.toml:41:mempalace-mcp = "mempalace.mcp_server:main" | ||
| .claude-plugin/plugin.json:12: "command": "mempalace-mcp" | ||
| .codex-plugin/plugin.json:24: "command": "mempalace-mcp" | ||
| .claude-plugin/.mcp.json:3: "command": "mempalace-mcp" | ||
| ``` |
There was a problem hiding this comment.
The “Expected” grep output hard-codes line numbers (e.g., pyproject.toml:41), but those will drift as files change, making the checklist misleading. Either remove -n from the grep command, or keep -n and update the example to omit/ignore line numbers (e.g., describe the expected files/strings rather than exact line numbers).
There was a problem hiding this comment.
Already addressed in 88bbc9e (same day as your review). Dropped -n from the grep command and rewrote the Expected block accordingly — checking presence, not location, so line drift can't make the checklist misleading.
| resolves to a `console_script` entry point declared in `pyproject.toml`. If | ||
| these disagree, `pip install mempalace` ships a plugin config pointing at a | ||
| binary that was never installed — exactly what broke v3.3.2 | ||
| ([#1093](https://github.com/MemPalace/mempalace/issues/1093)). |
There was a problem hiding this comment.
The docs call this a console_script entry point, but in this repo it’s declared under PEP 621 [project.scripts] (and the canonical setuptools group name is console_scripts). Consider rewording to avoid confusion (e.g., “a console script declared under [project.scripts] in pyproject.toml”).
| resolves to a `console_script` entry point declared in `pyproject.toml`. If | |
| these disagree, `pip install mempalace` ships a plugin config pointing at a | |
| binary that was never installed — exactly what broke v3.3.2 | |
| ([#1093](https://github.com/MemPalace/mempalace/issues/1093)). | |
| resolves to a console script declared under `[project.scripts]` in | |
| `pyproject.toml`. If these disagree, `pip install mempalace` ships a plugin | |
| config pointing at a binary that was never installed — exactly what broke | |
| v3.3.2 ([#1093](https://github.com/MemPalace/mempalace/issues/1093)). |
There was a problem hiding this comment.
Already addressed in 88bbc9e. Reworded to "a console script declared under `[project.scripts]` in `pyproject.toml`" — distinguishes PEP 621's [project.scripts] from setuptools' console_scripts group name.
|
Both addressed in
Thanks Copilot — both were right calls. |
Fulfills the "Optional: release-checklist addition" proposal at the bottom of MemPalace#1093 (the v3.3.2 release defect where plugin.json referenced a mempalace-mcp binary that pyproject.toml never declared, so fresh `pip install` was broken for everyone until messelink's MemPalace#340 was re-cut as v3.3.3). New file at docs/RELEASING.md (no existing doc at that path) with a single pre-release grep: grep -rn mempalace-mcp pyproject.toml .claude-plugin .codex-plugin The original MemPalace#1093 proposal specified `pyproject.toml .claude-plugin/plugin.json` (2 files). This expands via -rn directory recursion to also cover `.claude-plugin/.mcp.json` and `.codex-plugin/plugin.json`, which reference `mempalace-mcp` by name too — same class of regression through a different surface. Happy to trim to the narrower 2-file form if preferred; one-line edit. Shows the concrete expected output so a maintainer running this under release pressure can eyeball "pass" without mental translation, and points at MemPalace#340 as the historical fix anchor so "investigate why the entry is missing" has a diagnostic starting point rather than a dead end. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Two fixes from Copilot's 2026-04-23 inline review: 1. Drop `-n` from the grep command. Hard-coded line numbers in the "Expected" block would drift as files evolve, making the checklist misleading. The check is about presence, not location — line numbers add noise without helping pass/fail. 2. Reword "`console_script` entry point declared in pyproject.toml" → "console script declared under `[project.scripts]` in pyproject.toml". PEP 621's `[project.scripts]` is the canonical name for this repo's config form; the old wording conflated it with setuptools' `console_scripts` entry-point group name. Expected output block updated to match new grep (no colons before line numbers). Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
7bd93ab to
88bbc9e
Compare
Summary
Fulfilling the "Optional: release-checklist addition" proposal at the bottom of the #1093 issue body, which @bensig accepted on 2026-04-23 ("yes please on the small PR for docs/RELEASING.md, that one-liner
grep mempalace-mcp pyproject.toml .claude-plugin/plugin.jsonwould have saved this round").New file at
docs/RELEASING.md(no existing doc at that path) with a single pre-release grep:If
pyproject.tomlhas no match, themempalace-mcpentry point is missing and any freshpip installwill ship aplugin.jsonreferencing a binary that doesn't exist — exactly the v3.3.2 → #1093 defect.Scope note — grep width
The original proposal on #1093 specified
pyproject.toml .claude-plugin/plugin.json(2 files). This PR expands via-rndirectory recursion to also cover.claude-plugin/.mcp.jsonand.codex-plugin/plugin.json, both of which also referencemempalace-mcpby name ondevelop. Same class of regression, different surface — e.g. if a future schema change moves the command reference into.mcp.jsonwithout updatingpyproject.toml, the 2-file form would miss it.Happy to trim back to the literal 2-file form if you'd rather — it's a one-line edit. Defaulted to the broader form because the cognitive cost is identical and the coverage is strictly larger.
Complementary to mempalace-triage
The mempalace-triage PR #2 (merged earlier today) classifies release-blocker issues as CRITICAL after they're filed — faster triage. This grep catches the defect itself before tagging — prevention. The two don't overlap: dashboard speeds up post-mortem, grep stops the mistake at cut time.
Test plan
upstream/develop— returns all four expected lines (verified against a freshgit archiveextract ofupstream/develop):pyproject.toml:41:mempalace-mcp = "mempalace.mcp_server:main" .claude-plugin/plugin.json:12: "command": "mempalace-mcp" .codex-plugin/plugin.json:24: "command": "mempalace-mcp" .claude-plugin/.mcp.json:3: "command": "mempalace-mcp"git show v3.3.2:pyproject.toml | grep -c mempalace-mcpreturns0. The missing line is exactly what the check is designed to catch.🤖 Generated with Claude Code