Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
"name": "Rehan Masood",
"url": "https://github.com/Rmasood1122"
},
"renames": {
"titan-receipts": "commitproof"
},
"plugins": [
{
"name": "commitproof",
Expand Down
28 changes: 28 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,33 @@
# Changelog

## Unreleased

Installs made under the old name (`titan-receipts@titan-receipts-marketplace`)
stopped loading after a marketplace update once the plugin became
`commitproof`: Claude Code reported `Plugin "titan-receipts" not found` and the
plugin showed "failed to load". The marketplace now carries a `renames` entry
(`titan-receipts` -> `commitproof`), so those installs load again and their
settings move to the new name on the next marketplace update. Claude Code has
followed `renames` automatically since 2.1.193, per its changelog.

If you installed it as `titan-receipts`, run this once in a Claude Code
session to get the current version:

```
/plugin marketplace update titan-receipts-marketplace
/plugin install commitproof@titan-receipts-marketplace
```

If you also installed `commitproof@commitproof`, remove the old marketplace
instead (`/plugin marketplace remove titan-receipts-marketplace`), so only one
copy records receipts. To move onto the current name for good, follow
"Formerly Titan Receipts" in the README. If you installed it as `commitproof`,
nothing changes: `/plugin marketplace update commitproof` keeps you current.

- `.claude-plugin/marketplace.json`: the `renames` map.
- `tests/test_rename.py`: pins the map; the old-name check now allows the old
name only inside it.

## 1.3.1 — 2026-10-20

No behavior change. The directory held 1.3.0 under its credential-forward
Expand Down
15 changes: 14 additions & 1 deletion tests/test_rename.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,24 @@ def test_old_public_name_is_gone_from_user_facing_files():
"skills/receipt-integrity/SKILL.md")]
files += sorted((ROOT / "commands").glob("*.md"))
for f in files:
text = f.read_text(encoding="utf-8").lower()
text = f.read_text(encoding="utf-8")
if f.name == "marketplace.json": # the renames map is the one place the old name must stay
data = json.loads(text)
data.pop("renames", None)
text = json.dumps(data)
text = text.lower()
assert "titan-receipts" not in text and "titan receipts" not in text, f
assert "titan-gate-plugin" not in text, f


def test_old_installs_migrate_through_a_renames_entry():
"""Installs of titan-receipts@... broke when the plugin became commitproof: after a
marketplace update the old name was "not found" and the plugin failed to load. The
marketplace's renames map points the old name at this plugin, so they load again."""
mp = json.loads((ROOT / ".claude-plugin/marketplace.json").read_text())
assert mp.get("renames") == {"titan-receipts": NAME}
assert NAME in [p["name"] for p in mp["plugins"]] # the chain must end at a listed plugin

def sh(cmd, cwd):
r = subprocess.run(shell_argv(cmd), cwd=cwd, capture_output=True, text=True)
assert r.returncode == 0, r.stderr
Expand Down
Loading