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
pm init writes a malformed .gitignore entry that merges two paths into one line #514
When pm initializes a repository-local tracker (.agents/pm) it appends runtime/cache ignore rules to .gitignore, but one generated line is malformed — it concatenates two separate ignore paths into a single line, so neither is actually ignored.
Observed .gitignore content (block written by pm init)
# PM CLI runtime and cache files
.agents/pm/runtime/
.agents/pm/search/
.agents/pm/search/ (should ignore the whole search cache dir)
.agents/pm/runtime/metadata-cache-bodies.json (should ignore that one file)
Because they are concatenated as .agents/pm/search/.agents/pm/runtime/metadata-cache-bodies.json, the path does not exist and matches nothing.
Impact
metadata-cache-bodies.json is never ignored.
The primary runtime cache metadata-cache.json is not covered by any effective rule (it is also missing from the explicit list), so in repositories that version .agents/pm every pm command mutates tracked files, producing spurious git churn.
The blanket .agents/pm/runtime/ rule only protects untracked future files; already-tracked cache files stay tracked, so the merge/garble above is the actual root cause of the noise.
and should also explicitly list .agents/pm/runtime/metadata-cache.json (or rely solely on the .agents/pm/runtime/ blanket rule applied before the files are first tracked).
Steps to reproduce
pm init --workspace . (or pm init in a git repo) with an existing/empty .gitignore.
Inspect the pm-authored block in .gitignore.
Observe the concatenated path on the metadata-cache-bodies.json line.
Environment
pm CLI: latest (10.x line)
OS: Linux
Reproduced in the simworld monorepo where .agents/pm/runtime/metadata-cache*.json show up as tracked modifications after normal pm commands.
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!
Activity
coderabbitai commentedon Jul 11, 2026
🔗 Related PRs
#200 - Add validation self-repair and agent ergonomics primitives [closed]
#425 - Strengthen SDK linked-test imports and mandatory quality gates [merged]
#428 - Harden SDK extension runtime packaging [merged]
#475 - Improve package install and annotation agent UX [merged]
#491 - Harden init target safety and package install verification [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!
chore(pm): file pm-hous (GH-514 init .gitignore ownership gap, root-c…
unbraind commentedon Jul 11, 2026
pm tracker item:
pm-hous— pm init writes a malformed .gitignore entry that merges two paths into one line #514: pm init writes no .gitignore rules — runtime/search caches churn as tracked files in downstream reposunbraind commentedon Jul 12, 2026
Resolved in merged PR #520: pm init now reconciles a canonical fenced workspace .gitignore block for runtime/search caches, repairs malformed content, remains idempotent, and handles nested invocation correctly.