Files
msd-core/capabilities/mempalace/fragments/capture-problems.md
Tom Boucher ed79902509 feat(#2007): implement mempalace memory_mode kg_backend and replace routing (#2010)
Wire the two forward-declared mempalace.memory_mode modes so they actually
route recall/capture instead of silently behaving as `augment`:

- kg_backend: the palace temporal KG is the primary knowledge-graph source;
  native .planning/graphs/ is the fallback. Non-KG drawer recall stays additive.
- replace: recall resolves through the palace as the source of truth; native
  artifacts are the fallback.

Every mode stays onError:skip and default-resilient — an unreachable palace
degrades to native memory and GSD keeps writing .planning/graphs/, so no memory
is lost. Cross-mode .planning/graphs/ migration remains a documented open
question (PRD/ADR §17), out of scope here.

Surfaces updated (instruction-only contract): recall/capture commands (+ generated
skills), discuss/wave fragments, curator agent, capability.json schema. Docs:
how-to Step 3, CONFIGURATION, FEATURES, CONTEXT glossary. Regenerated
capability-registry, golden install-parity fixtures (mempalace hashes only),
agent-size-baseline. Added a routing-contract + cross-surface parity test.

Incidental (folded per no-defer rule): removed pre-existing unused imports
(spawnSync in capability-registry.test.cjs; fs in issue-498-package-identity.test.cjs)
that eslint flagged in/alongside the touched files.

Closes #2007

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 15:01:22 -04:00

2.1 KiB

Capture problems → fixes (MemPalace)

Gate first. Read .planning/config.json. If mempalace.enabled is not true, or mempalace.capture_artifacts is false, skip this entire section and let the wave complete unchanged. (This contribution is only injected when the capability is enabled; the capture_artifacts check lets you turn capture off without disabling the rest of the capability.)

Otherwise — after verifying this wave, persist any confirmed problem→fix pairs into the palace so they are recalled in future phases. This is best-effort; if MemPalace is unreachable, skip silently — capture never fails a wave.

For each confirmed bug/issue resolved in this wave:

  1. Resolve the wing (mempalace.wing, else project_code, else project dir) and target room: problems.
  2. Dedupe first. Call mempalace_check_duplicate (interactive) before filing so re-runs don't create duplicate drawers.
  3. File the drawer verbatim. Store the problem statement and its fix as a drawer in room: problems — interactive: mempalace_add_drawer; headless: mempalace mine / mempalace hook run. Include provenance (source_file, phase id).
  4. Mirror the KG fact when mempalace.mirror_kg is on: add (<bug>, fixed_by, <fix>) with valid_from = the phase date via mempalace_kg_add.
  5. Mode awareness (mempalace.memory_mode). Under augment the fact is an additive mirror alongside .planning/graphs/. Under kg_backend/replace the palace is the authoritative store for the fact; GSD still writes .planning/graphs/ through its normal graphify, so an unreachable palace never loses it.

Captures are idempotent: deterministic drawer IDs + check_duplicate mean re-running the wave re-files the same content without duplication. On any error, skip and let the wave complete normally.