Skip to content

refactor: align memory injection with Claude Code architecture#1329

Merged
lewis617 merged 1 commit into
mainfrom
worktree-shallow-bold-wolf
Jul 2, 2026
Merged

refactor: align memory injection with Claude Code architecture#1329
lewis617 merged 1 commit into
mainfrom
worktree-shallow-bold-wolf

Conversation

@lewis617

@lewis617 lewis617 commented Jul 2, 2026

Copy link
Copy Markdown
Collaborator

Summary

Move memory injection from system prompt to messages array (prepend + tail), persist conditional rules and task reminders to transcript as isMeta messages, and replace per-turn filesInContext rescan with event-driven triggers — aligning Wave with Claude Code's architecture.

Changes

Memory Injection Architecture (matches Claude Code)

  • Unconditional rules (no paths): Transient, prepended as <system-reminder> each turn
  • Conditional rules (with paths): Event-driven via triggerFileRead()processTriggeredRules(), persisted as isMeta: true user messages, dedup via loadedRuleIds Set
  • Task reminder: Persisted to messageManager with <!-- task-reminder --> marker so turn counter correctly throttles to every 10 turns (fixes repeated firing bug where reminder fired every turn once threshold crossed)

API Changes

  • Remove ## Memory Context section from system prompt
  • Delete filesInContext Set, replaced with pendingFileReadTriggers + loadedRuleIds
  • Rename touchFile()triggerFileRead()
  • Rename hasFileInContext()hasFileBeenRead()
  • getMemoryForInjection() return type simplified: { prependContent } (removed conditionalRules)
  • New method processTriggeredRules() returns matched conditional rules
  • New method getActiveRulesSplit() on MemoryRuleManager

Spec Updates

  • specs/017-memory-management.md: FR-016 (event-driven + persistence), FR-025 (loadedRuleIds), FR-026 (compaction), FR-027 deleted
  • specs/043-task-management-tools.md: FR-030 (persist to transcript as isMeta: true)

Verification

  • All 3139 tests pass (1 skipped)
  • Type-check clean
  • Lint clean

Move memory injection from system prompt to messages array (prepend + tail),
persist conditional rules and task reminders to transcript as isMeta messages,
and replace per-turn filesInContext rescan with event-driven triggers.

- Unconditional rules: transient, prepended as <system-reminder> each turn
- Conditional rules: event-driven via triggerFileRead() → processTriggeredRules(),
  persisted as isMeta user messages, dedup via loadedRuleIds Set
- Task reminder: persisted to messageManager with <!-- task-reminder --> marker
  so turn counter correctly throttles to every 10 turns (fixes repeated firing bug)
- Remove '## Memory Context' section from system prompt
- Delete filesInContext, replaced with pendingFileReadTriggers + loadedRuleIds
- Rename touchFile → triggerFileRead, hasFileInContext → hasFileBeenRead
- Update specs 017-memory-management and 043-task-management-tools
- All 3139 tests pass (1 skipped), type-check clean
@lewis617 lewis617 merged commit 657cfd7 into main Jul 2, 2026
1 check passed
@lewis617 lewis617 deleted the worktree-shallow-bold-wolf branch July 2, 2026 11:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant