* fix(#2018): applySurface empty manifest no longer deletes gsd-* agents The agent-prune loop in _syncGsdDir deleted any gsd-*.md not in the staged set. When the manifest resolved empty (null/non-object, no entries, no files key, or unresolvable install source root), the staged set was empty → every gsd-* agent was deleted. Skills were guarded by pruneSkillDirs' manifest- membership check; agents had no equivalent. - src/surface.cts: skip the agent-prune loop when the manifest is empty/absent (copy still runs — genuinely new agents are added). - tests/surface-empty-manifest-agents.test.cjs: boundary matrix — empty manifest preserves agents (Map() + undefined); non-empty manifest + empty staged still prunes (boundary); empty manifest + new staged copies new + preserves existing. Closes #2018 * docs(#2018): backfill changeset pr 2031
700 B
700 B
type, pr
| type | pr |
|---|---|
| Fixed | 2031 |
applySurface no longer deletes every gsd-* agent when the skills manifest resolves empty — the agent-prune loop in _syncGsdDir deleted any gsd-*.md not in the staged set, and when the manifest was empty/unresolvable (null manifest, no array entries, no files key, or an unresolvable install source root), the staged set was empty → every agent was pruned. Skills were guarded by pruneSkillDirs's manifest-membership check (conservative preservation on empty manifest); agents had no equivalent. The agent-prune loop is now skipped when the manifest is empty/absent, so agents are preserved while copy (adding genuinely new agents) still runs. (#2018)