Summary
The docs promise:
The current issue, comparison, verification, and output files are kept out of ranking, change detection, and cache state, so a saved FixMap report cannot recommend itself.
That exclusion appears to apply only to files written by the current invocation. A report saved by a previous invocation ranks as a high-confidence "changed file" in later plan --working-tree runs, appears under Changed Files, and outranks task-relevant ranking candidates. fixmap setup artifacts behave the same way.
Environment
- fixmap 0.9.0 (npm global)
- Windows (win32), Node v24.13.0
Repro
git init demo && cd demo
Set-Content package.json '{"name":"demo","scripts":{"test":"node --test"}}'
New-Item src, test | Out-Null
Set-Content src/pay.js 'export function pay(amount){ return amount*2; }'
Set-Content test/pay.test.js 'import "../src/pay.js";'
git add -A; git commit -m init
# 1. Save a report at the repo root (a very common workflow)
fixmap plan --issue "fix pay" --format json --output saved-report.json
# 2. Edit the source (uncommitted)
Set-Content src/pay.js 'export function pay(amount){ return amount*3; }'
# 3. Map the working tree
fixmap plan --working-tree --include-untracked
Actual (step 3)
## Context Files
- `src/pay.js` (high confidence, score 57): changed file; ...
- `saved-report.json` (high confidence, score 22): changed file; content matches task terms: pay
...
## Changed Files
- `saved-report.json`
- `src/pay.js`
A stale FixMap artifact is presented to the agent as a high-confidence inspection target and as a changed file of this edit. In sessions with several accumulated reports (out-1.json, out-2.json, …) they crowd the default --limit 8: in one observed run, six old reports plus a scratch JSON filled seven of eight context slots while the only relevant source file ranked behind them.
Related downstream effect seen in that crowded run: the Impact Graph routed the repo's test onto an artifact instead of the source file it imports (test/auth.test.js … routed test for big-plan.json). That attribution bug has a separate, cleaner repro (issue to follow), but artifact crowding is what exposed it.
fixmap setup outputs (.claude/skills/fixmap/SKILL.md, .cursor/commands/fixmap.md, …) rank identically as high-confidence changed files after any working-tree edit, since most users don't commit them immediately.
Expected
FixMap-generated artifacts should not compete with real source in later maps — per the quoted guarantee, output/report files should be kept out of ranking and change detection regardless of which invocation produced them, or at minimum be heavily deprioritized in --working-tree mode.
Suggested fix
FixMap already ships a structural validator (fixmap validate). When scanning untracked/changed paths, parse each candidate JSON at the repo root: if it validates as a FixMap report (or carries the reportVersion marker), exclude it from ranking/change detection the same way the current invocation's --output target is excluded. Setup artifacts could be recognized by their fixed paths (.claude/skills/fixmap/**, .cursor/commands/fixmap.md, .github/prompts/fixmap.prompt.md, .agents/skills/fixmap/**).
Summary
The docs promise:
That exclusion appears to apply only to files written by the current invocation. A report saved by a previous invocation ranks as a high-confidence "changed file" in later
plan --working-treeruns, appears under Changed Files, and outranks task-relevant ranking candidates.fixmap setupartifacts behave the same way.Environment
Repro
Actual (step 3)
A stale FixMap artifact is presented to the agent as a high-confidence inspection target and as a changed file of this edit. In sessions with several accumulated reports (
out-1.json,out-2.json, …) they crowd the default--limit 8: in one observed run, six old reports plus a scratch JSON filled seven of eight context slots while the only relevant source file ranked behind them.Related downstream effect seen in that crowded run: the Impact Graph routed the repo's test onto an artifact instead of the source file it imports (
test/auth.test.js … routed test for big-plan.json). That attribution bug has a separate, cleaner repro (issue to follow), but artifact crowding is what exposed it.fixmap setupoutputs (.claude/skills/fixmap/SKILL.md,.cursor/commands/fixmap.md, …) rank identically as high-confidence changed files after any working-tree edit, since most users don't commit them immediately.Expected
FixMap-generated artifacts should not compete with real source in later maps — per the quoted guarantee, output/report files should be kept out of ranking and change detection regardless of which invocation produced them, or at minimum be heavily deprioritized in
--working-treemode.Suggested fix
FixMap already ships a structural validator (
fixmap validate). When scanning untracked/changed paths, parse each candidate JSON at the repo root: if it validates as a FixMap report (or carries thereportVersionmarker), exclude it from ranking/change detection the same way the current invocation's--outputtarget is excluded. Setup artifacts could be recognized by their fixed paths (.claude/skills/fixmap/**,.cursor/commands/fixmap.md,.github/prompts/fixmap.prompt.md,.agents/skills/fixmap/**).