Skip to content

v2.7.0: Multi-Runtime Portability#24

Merged
RichardHightower merged 62 commits intomainfrom
gsd/phase-50-integration-testing-migration
Mar 22, 2026
Merged

v2.7.0: Multi-Runtime Portability#24
RichardHightower merged 62 commits intomainfrom
gsd/phase-50-integration-testing-migration

Conversation

@RichardHightower
Copy link
Contributor

Summary

  • memory-installer crate with RuntimeConverter trait and 6 runtime converters (Claude, Gemini, Codex, Copilot, Skills, OpenCode stub)
  • Plugin parser with 2-level discovery and gray_matter frontmatter extraction
  • Centralized tool mapping tables: 11 Claude tool names × 6 runtimes (compile-time exhaustive match)
  • 7 E2E integration tests proving full convert-and-write pipeline
  • 3 old adapter directories archived with README stubs (51 files, 12K+ lines removed)

Phases

Phase Name Plans
45 Canonical Source Consolidation 1
46 Installer Crate Foundation 3
47 Claude & OpenCode Converters 1
48 Gemini & Codex Converters 2
49 Copilot, Skills & Hook Porting 2
50 Integration Testing & Migration 2

Known Gaps

  • OC-01–06: OpenCode converter is a stub (deferred to v3.0)

Test plan

  • cargo fmt --all -- --check passes
  • cargo clippy --workspace --all-targets --all-features -- -D warnings passes
  • cargo test --workspace --all-features passes (111 tests)
  • 7 E2E converter pipeline tests pass
  • All prior regression tests pass

🤖 Generated with Claude Code

RichardHightower and others added 30 commits March 16, 2026 19:01
Audits both plugin directories, extracts all frontmatter fields from 21
files, identifies the CANON-01 reinterpretation (keep dirs separate), and
documents the plugin.json/marketplace.json gap for Phase 46.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add plugins/installer-sources.json listing both canonical plugin source dirs
- Verified: 6 commands, 13 skills, 2 agents across both plugin directories
- Provides discovery anchor for Phase 46 installer parser

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- CANON-01: reworded to reflect two-dir approach (no merge)
- CANON-02: marked as deferred to Phase 49
- Traceability table: CANON-02 phase updated from 45 to 49

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SUMMARY.md with execution results
- STATE.md updated: Phase 45 complete, Phase 46 next
- ROADMAP.md progress updated
- REQUIREMENTS.md: CANON-01/02/03 marked complete

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Documents standard stack, architecture patterns, type designs, CLI
structure, tool maps, managed-section marker format, dry-run pattern,
and validation test map for the memory-installer crate scaffold.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…and converter stubs

- Add memory-installer to workspace with gray_matter and walkdir dependencies
- Define Runtime, InstallScope, InstallConfig, PluginBundle, ConvertedFile types
- CLI with install subcommand accepting --agent, --project, --global, --dir, --dry-run
- RuntimeConverter trait with 7 methods for plugin conversion
- 6 converter stubs (Claude, OpenCode, Gemini, Codex, Copilot, Skills) implementing trait
- select_converter dispatch table in converters/mod.rs
- Managed-section marker constants as compatibility contracts
- No tokio dependency -- pure synchronous binary
- Verify select_converter returns correct name for each Runtime variant
- Test stub converters return empty results (contract for future implementations)
- Verify target_dir produces runtime-specific paths for project scope
- SUMMARY.md with 2 tasks, 13 files, 8 tests
- STATE.md updated with position and decisions
- ROADMAP.md updated with phase 46 progress (1/3 plans)
- REQUIREMENTS.md: INST-01 and INST-03 marked complete
- 7 tests for parse_md_file and parse_sources
- Tests verify frontmatter extraction, graceful no-frontmatter handling
- Tests assert 6 commands, 2 agents, 13 skills from real plugin dirs
- Tests check skill additional_files and command frontmatter fields

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- parse_md_file uses gray_matter to extract YAML frontmatter as serde_json::Value
- parse_sources reads installer-sources.json, walks marketplace.json, returns PluginBundle
- Handles missing frontmatter gracefully with warning and empty Value::Object
- Skill directories walked with walkdir for additional_files (references/, scripts/)
- All 7 parser tests pass, clippy clean

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- SUMMARY.md with parser implementation details
- STATE.md updated with position and decisions
- ROADMAP.md updated with plan progress
- REQUIREMENTS.md: INST-02 marked complete

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…table

- Static match-based map_tool() function covering Claude, OpenCode, Gemini, Codex, Copilot, Skills
- Gemini Task tool correctly returns None (auto-discovered, excluded)
- Unknown tool names return None for all runtimes
- KNOWN_TOOLS constant for exhaustive iteration
- 18 unit tests with individual and exhaustive coverage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- write_files() with dry-run support (CREATE/OVERWRITE reporting)
- merge_managed_section() handling 3 cases: new file, existing with markers, existing without
- remove_managed_section() for future --uninstall support
- WriteReport struct with Display impl for summary output
- Re-export MANAGED_BEGIN/MANAGED_END constants from writer module
- Wire main.rs: parse_sources -> select_converter -> convert_* -> write_files
- Auto-discover plugins/ directory with fallback to --source flag
- 14 writer unit tests, all passing
- End-to-end dry-run verified: memory-installer install --agent claude --project --dry-run

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 46-03-SUMMARY.md with tool maps, writer, pipeline wiring results
- STATE.md updated: Phase 46 complete, ready for Phase 47
- ROADMAP.md updated with Phase 46 progress (3/3 plans)
- REQUIREMENTS.md: INST-04, INST-05, INST-06, INST-07 marked complete

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add helpers.rs with value_to_yaml, reconstruct_md, rewrite_paths functions
- Implement ClaudeConverter: convert_command, convert_agent, convert_skill
- Path rewriting: ~/.claude/ -> ~/.config/agent-memory/ in all body content
- convert_hook returns None (deferred to Phase 49)
- generate_guidance returns empty Vec (no config needed for Claude)
- Update stub test to exclude Claude from empty-result assertions
- 22 new tests for helpers and Claude converter (69 total passing)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
RichardHightower and others added 19 commits March 18, 2026 00:04
- convert_command produces .github/skills/<name>/SKILL.md with YAML frontmatter
- convert_agent produces .github/agents/<name>.agent.md with tools array and infer:true
- convert_skill handles additional files with path rewriting
- generate_guidance produces hooks JSON and embedded capture script
- target_dir uses .github/ for project scope (not .github/copilot/)
- All 12 unit tests passing

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove Copilot from unimplemented_converters_return_empty_results
- Fix clippy single-element-loop warning by unwinding loop
- Only Skills remains as a stub converter

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- SUMMARY.md with task commits and decisions
- STATE.md updated to phase 49 plan 1
- ROADMAP.md and REQUIREMENTS.md updated

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…agent, convert_skill

- Commands produce skills/<name>/SKILL.md with YAML frontmatter and path-rewritten body
- Agents produce orchestration skills with canonical Claude tool names (no remapping)
- Skills handled with SKILL.md + additional files, all path-rewritten
- convert_hook returns None, generate_guidance returns empty Vec
- 7 unit tests covering all converter methods and edge cases

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace unimplemented_converters_return_empty_results with implemented_converters_produce_nonempty_command_output
- Verify 5 implemented converters (Claude, Gemini, Codex, Copilot, Skills) produce non-empty output
- OpenCode excluded (still a stub from Phase 47 scope)
- Apply cargo fmt formatting fixes across converter files
- All 104 memory-installer tests pass, clippy clean

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- SUMMARY.md with SkillsConverter implementation details
- STATE.md updated to Phase 49 Plan 2 complete (100%)
- ROADMAP.md and REQUIREMENTS.md updated

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Three-phase milestone spec for v3.0: Retrieval Orchestrator (memory-orchestrator
crate with RRF fusion + LLM rerank), Simple CLI API (new `memory` binary with
JSON envelope output), and Benchmark Suite (custom harness + LOCOMO adapter).

Closes gaps vs MemMachine (retrieval pipeline) and Mem0 (developer API) with
measurable benchmark proof. Reviewer-approved with all 9 spec issues resolved.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Three GSD-ready implementation plans for v3.0 Competitive Parity milestone:
- Phase A: memory-orchestrator crate (RRF fusion, query expansion, rerank trait)
- Phase B: memory-cli crate with `memory` binary (6 commands, JSON envelope)
- Phase C: memory-bench crate (custom harness + LOCOMO adapter)

Plans feed into /gsd:new-milestone after v2.7 ships.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- canonical bundle exercises command/agent/skill/hook through full pipeline
- file structure and content assertions for Claude, Codex, Gemini, Copilot, Skills
- OpenCode stub confirms empty output without file creation
- MIG-04 verified via workspace member check

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- rustfmt adjustments for closure filter chains

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SUMMARY.md with E2E test results for all 6 converters
- STATE.md advanced to plan 2 of 2
- ROADMAP.md updated with plan progress
- Requirements MIG-01, MIG-02, MIG-04 marked complete

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Replace copilot, gemini, opencode adapter contents with archive READMEs
- Delete obsolete skills, agents, commands, hooks config, .gitignore files
- Preserve memory-capture.sh (include_str! compile dependency)
- Active plugins (query, setup) and installer-sources.json untouched

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SUMMARY.md documents archival of 3 adapter directories
- STATE.md updated to phase 50 COMPLETE
- ROADMAP.md updated with plan progress
- MIG-03 requirement marked complete

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Archive milestone artifacts, evolve PROJECT.md with v2.7 validated
requirements and key decisions, reorganize ROADMAP.md with collapsed
milestone entry, update MILESTONES.md with accomplishments and stats.

Known gaps: OC-01-06 (OpenCode converter stub) deferred to v3.0.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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