You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Merge receipts store item_path with literal surrounding quotes from %P, and pm merge reconcile publishes the quoted path into committed history #771
Merge decision receipts store item_path with literal single-quote characters embedded in the string, because the value is taken verbatim from git's %P and the .gitattributes patterns that pm merge install writes are themselves quoted. The bad value is not confined to the clone-local receipt — pm merge reconcile copies it into the committedhistory/<id>.jsonl audit entry, so it is published to every consumer of the tracker.
The quotes are part of the string value (confirmed in the raw receipt file .git/pm-merge-receipts/<uuid>.json, not a display artifact of the JSON encoder).
After pm merge reconcile, the same quoted value is persisted into the committed history entry:
pm merge install writes quoted patterns into .gitattributes (correct — the fence needs them for paths with spaces):
".pm/tasks/*.toon" merge=pm-item-toon
git then passes the matched path through to the driver's %P placeholder, and the driver stores the received --item-path string without stripping the surrounding quotes.
Impact
Any consumer that wants to act on a receipt — open the conflicted item, link it in a report, diff it, group receipts by directory — has to know to strip quotes first:
fs.readFileSync(receipt.item_path)// ENOENTpath.resolve(root,receipt.item_path)// .../'.pm/tasks/lab-fx0u.toon'receipt.item_path.replace(/^'|'$/g,"")// the workaround every consumer needs
item_id is clean, so receipts remain usable via id lookup — this is a correctness/ergonomics bug rather than a blocker, but it is baked into published history and will need a migration if left.
Suggested fix
Strip a single matched layer of surrounding '/" from the --item-path value where the driver ingests it (before it reaches the receipt writer), so both the clone-local receipt and the committed merge_reconcile audit entry carry a plain repository-relative path. Existing receipts/history entries can be normalised on read for backward compatibility.
Environment
pm-cli 2026.7.27 (@unbrained/pm-cli), Node 26.5.0, Linux
.gitattributes fence written by pm merge install (unmodified)
#317 - fix(ci): resolve Windows script-spec separator/mocked-path class (pm-s5pe) [merged] #475 - Improve package install and annotation agent UX [merged] #614 - SDK-first field-aware merge safety and storage integrity [merged] #673 - feat(sdk): harden workspace mutation and migration primitives [merged] #758 - Make branch merge decisions recoverable, replayable, and CI-enforced [merged]
📝 Issue Planner
Check the box below or use the @coderabbitai plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.
Create Plan
🧪 Issue enrichment is currently in open beta.
You can configure auto-planning by selecting labels in the issue_enrichment configuration.
To disable automatic issue enrichment, add the following to your .coderabbit.yaml:
issue_enrichment:
auto_enrich:
enabled: false
💬 Have feedback or questions? Drop into our discord!
Canonical PM owner: pm-9nfpwd, originally reported as #763 and fixed on main in PR #767. The tracked fix removes duplicate quoting and normalizes one legacy quote pair before receipts or reconciled history consume the path. This report is therefore linked to the existing all-status canonical item rather than creating a duplicate PM item; the currently published 2026.7.27 package predates that main-branch fix.\n\nCodeRabbit correctly identified #763 as the duplicate lineage.
Merged resolution: #767. Existing canonical PM item: pm-9nfpwd. Receipt and reconciled-history paths normalize one legacy surrounding quote pair; this report was the duplicate lineage of #763.
Activity
coderabbitai commentedon Jul 27, 2026
🔗 Related PRs
#317 - fix(ci): resolve Windows script-spec separator/mocked-path class (pm-s5pe) [merged]
#475 - Improve package install and annotation agent UX [merged]
#614 - SDK-first field-aware merge safety and storage integrity [merged]
#673 - feat(sdk): harden workspace mutation and migration primitives [merged]
#758 - Make branch merge decisions recoverable, replayable, and CI-enforced [merged]
📝 Issue Planner
Check the box below or use the
@coderabbitai plancommand to generate an implementation plan and prompts that you can use with your favorite coding assistant.🧪 Issue enrichment is currently in open beta.
You can configure auto-planning by selecting labels in the issue_enrichment configuration.
To disable automatic issue enrichment, add the following to your
.coderabbit.yaml:💬 Have feedback or questions? Drop into our discord!
unbraind commentedon Jul 27, 2026
Canonical PM owner: pm-9nfpwd, originally reported as #763 and fixed on main in PR #767. The tracked fix removes duplicate quoting and normalizes one legacy quote pair before receipts or reconciled history consume the path. This report is therefore linked to the existing all-status canonical item rather than creating a duplicate PM item; the currently published 2026.7.27 package predates that main-branch fix.\n\nCodeRabbit correctly identified #763 as the duplicate lineage.
Add an ops merge-receipts fleet gate over sdk/merge, and fix three de…
Surface pending merge decisions in brief, and honour the host-owned -…
unbraind commentedon Jul 28, 2026
Merged resolution: #767. Existing canonical PM item: pm-9nfpwd. Receipt and reconciled-history paths normalize one legacy surrounding quote pair; this report was the duplicate lineage of #763.