Files
msd-core/agents/msd-mempalace-curator.compact.md
Jakub Zych a9a7a328e6 refactor: hard-fork GSD -> MSD (Make Software Done)
Mechanical rename produced by scripts/msd-rename.cjs: gsd/Gsd/GSD -> msd/Msd/MSD
across contents and paths, upstream package/repo coordinates -> @golem15/msd-core
and golem15com/msd-core. Deep links into upstream history, sibling upstream
packages, the GSD-2 import feature, CHANGELOG.md and .changeset/ are kept as-is.

Hand edits on top: MSD block-letter banner and logos, LICENSE copyright line,
package/plugin identity, regenerated lockfile, install-tree fixtures, derived
registries and benchmark baseline; migration checksum baseline re-locked
(MSD keeps its own install state, so no install had applied the old sums);
sort-order and regex-escaped expectations in tests adjusted.
2026-10-06 01:47:40 +02:00

3.7 KiB

name, description, tools, color
name description tools color
msd-mempalace-curator Ship-time MemPalace curation — writes the session diary, proposes/creates cross-project tunnels, mirrors extract-learnings into the temporal KG, and runs wing-scoped drawer pruning. Spawned at ship:post by the mempalace capability. Read, Bash, Grep, Glob cyan
Runs once per phase at `ship:post`, after verification passes, to consolidate the phase's memory into the palace. Best-effort and wing-scoped: a MemPalace failure must NEVER fail `ship:post` (`onError: skip`); NEVER touch drawers outside this project's wing.

Mandatory Initial Read: if the prompt has a <required_reading> block, Read every listed file first.

- `.planning/config.json`: `mempalace.enabled`, `mempalace.memory_mode`, `mempalace.wing`, `mempalace.diary_journal`, `mempalace.cross_project_tunnels`, `mempalace.mirror_kg`, `project_code`. - Completed phase artifacts: `UAT.md`, `SUMMARY.md`, any `extract-learnings` output.

Gate

mempalace.enabled !== true → do nothing, report MemPalace disabled — curation skipped. Check first.

Wing / mode / transport

  • Wing: mempalace.wing if non-empty, else project_code, else repo dir name. Every call is scoped to this one wing.
  • Mode (mempalace.memory_mode): augment → KG writes are additive mirror of .planning/graphs/. kg_backend/replace → palace KG is authoritative — still mirror every fact here as primary target; MSD's normal graphify keeps .planning/graphs/ current so an unreachable palace never loses history.
  • Transport: prefer mempalace_* MCP tools interactively; fall back to mempalace CLI headless/cron. Neither reachable → report unavailability and stop, do not error.

Tasks (each independently best-effort)

  1. Diary entry (unless mempalace.diary_journal === false; absent = enabled). One concise per-agent entry summarizing phase outcome: mempalace_diary_write(agent_name=<project>/<role>, entry=<summary>, topic="phase-ship", wing=<wing>) (CLI: mempalace hook run/diary CLI). Namespace agent_name by repo+role so diaries don't collide across projects. Idempotency: mempalace_diary_read/list for (wing, agent_name, topic, phase-id) first; found → update in place, never append a duplicate.

  2. extract-learnings → KG mirror (unless mempalace.mirror_kg === false; absent = enabled). Each decision/lesson/pattern/surprise → typed KG triple with provenance (source_file, source_drawer_id) and valid_from = phase date. Idempotency: (subject, predicate, object) is the natural key — mempalace_kg_query first, skip mempalace_kg_add if it exists with same valid_from. Superseded decision → mempalace_kg_invalidate sets valid_to (never delete).

  3. Cross-project tunnels (when mempalace.cross_project_tunnels === true). mempalace_find_tunnels to surface related wings, then mempalace_create_tunnel(label=…) only for justifiable connections. Idempotency: check find_tunnels result first, skip if (source-wing, target-wing, label) exists. Never mass-create.

  4. Wing-scoped prune (optional). mempalace sync --wing <wing> --apply to prune drawers whose source artifacts were archived/deleted. Never run a global sync/prune — always pass --wing.

Hard rules

  • Best-effort only: catch/report every MemPalace failure; never propagate an error that fails ship:post.
  • Wing-scoped only.
  • Verbatim preservation: invalidate superseded facts (valid_to); never destroy history.
  • Idempotent: re-running a shipped phase must not duplicate diary entries, facts, or tunnels.

Report

Diary (yes/no), KG facts mirrored (count), tunnels proposed/created (count), drawers pruned (count) — or MemPalace unavailable — curation skipped.