Repository navigation
MVP 1A - #2
Merged
Merged
MVP 1A#2
Conversation
- Set up Rust CLI structure with clap framework - Add integration tests for init command behavior - Implement init to create .gitmind/links/ directory - Check for git repository existence before init - Handle already initialized case - All tests run in isolated temporary directories Tests pass: init creates directory structure and fails appropriately when not in a git repo or already initialized.
- Add git commit format instructions to CLAUDE.md - Mark CLI structure setup as complete in TASKLIST.md - Mark init command implementation as complete - Update Phase 1a progress indicators
- Add F001 requirements: metadata support, bidirectional lookups, deduplication - Add F002 extraction patterns: all Markdown link types, metadata capture - Add F002 performance requirements: <1s for 100 files, <100MB memory - Add F013 CLI features: query languages, time travel, import/export - Add shell integration: git aliases, completions, REPL mode - Add developer tools: pipeline integration, JSON output, batch mode - Add configuration management and optimization commands TASKLIST now comprehensively reflects all requirements from design/features/ ensuring nothing is missed during implementation.
- Link TASKLIST.md items to corresponding feature docs - Create ADR-001 documenting Option B storage choice - Update F001 status to 'In Progress' with completion checklist - Update F013 status to 'In Progress' with CLI progress - Add feature references throughout TASKLIST phases Following new practice: document decisions in design/decisions and update feature status as implementation progresses.
- Add .obsidian/ to ignore Obsidian workspace settings - Keep CLAUDE.md tracked for shared AI assistant instructions - Obsidian settings remain local to each developer
- Add git commit format instructions for better collaboration - Specify to suggest commits after completing TASKLIST items - Add reminder to keep TASKLIST.md up-to-date - Include requirement to document decisions in design/decisions/ - Add instruction to update feature status upon completion These practices ensure consistent documentation and commit history across all contributors and AI assistants.
- Always test behavior, not implementation - One file = one thing (struct/enum/trait) - One test file per component - Single Responsibility Principle for modules
- Set COMPOSE_BAKE=true in docker-build target - Improves build performance through better parallelization
- Add commands/mod.rs to organize command modules - Add commands/init.rs with InitCommand implementation - Add commands/link.rs with LinkCommand implementation - Each command has single responsibility with execute() method
- Move Link representation to link.rs - Add canonical string format methods - Add SHA calculation methods - Add parsing from canonical string - Include unit tests for Link behavior
- Remove inline command logic from lib.rs - Delegate init() to InitCommand - Delegate link() to LinkCommand - Maintain clean API surface
- Update TASKLIST.md to show link command implementation done - Update F013 feature status for link command - Ready to implement list command next
- Lessons learned from single responsibility refactor - Benefits of component-specific test files - Command pattern observations - Docker Bake performance improvements
dependencies - Add sha1 and chrono dependencies for link content hashing - Add error types for link command validation - Add --type flag to link command with CROSS_REF default - Wire up link command in main.rs with error handling
Adds the ability to list all semantic links in the repository with filtering: - List all links: gitmind list - Filter by source: gitmind list --source file.md - Filter by target: gitmind list --target file.md Shows link type, source, target, and timestamp for each link.
Adds tests and other things I forgot to include in the last commit. My bad.
Adds the ability to remove semantic links between files: - Remove specific link: gitmind unlink source target - Remove by type: gitmind unlink source target --type - Remove all from source: gitmind unlink source --all - Remove all to target: gitmind unlink --to target Includes link parsing from canonical string format.
Git removes empty directories, which was causing 'gitmind not initialized' errors after removing all links. Now, we create a .gitkeep file during inint.
Documents the need for link cleanup and broken link management. Defines unlink and check commands for maintaining graph integrity.
- Add three-level testing strategy to CLAUDE.md - Define 'Definition of Done' tied to acceptance critieria - Update F013 progress with completed commands
Add unlink and check commands to Phase 1a MVP based on realization that link cleanup is essential for a viable product.
Captures the realization that forgetting is as vital as remembering in cognitive systems, leading to inclusion of hygiene commands in MVP.
- Introduce CommandResult<T> type with exit codes and optional values - Refactor all App methods to return CommandResult instead of Result - Update all tests to use App API directly instead of spawning processes - Tests now verify behavior through exit codes and return values - Fix bug where duplicate links returned success instead of error - Add Debug and PartialEq derives to Link struct for testability This eliminates brittle stdout/stderr string matching in tests, making them more maintainable and focused on behavior rather than implementation details.
- Implement check command to find and fix broken links - Add --fix flag to remove broken links automatically - Add --dry-run flag to preview what would be fixed - Support detection of missing source or target files - Auto-commit removed links with semantic message - Add Clone derive to Link struct for check implementation - Update TASKLIST.md to mark Phase 1a as complete This completes the MVP with all five essential commands: init, link, list, unlink, and check. The knowledge graph now has full link hygiene capabilities."
- Replace map_or with is_none_or to fix clippy unnecessary-map-or warnings - Update Dockerfile.dev from Rust 1.78 to latest for compatibility with CI - Ensures tests pass on GitHub Actions which uses Rust 1.87
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR completes the Phase 1a Minimal Viable Product (MVP) for
gitmind, implementing all five essential commands needed for a functional Git-based knowledge graph.The implementation follows Test-Driven Development (TDD) principles and introduces a robust
CommandResult<T>pattern that eliminates brittle stdout/stderr testing.What's Included
Core Commands (5/5 Complete)
gitmind init- Initialize knowledge graph in Git repositorygitmind link- Create semantic links between filesgitmind list- View and filter existing linksgitmind unlink- Remove specific links with flexible optionsgitmind check- Find and optionally fix broken linksKey Features
Technical Highlights
Architecture Improvements
CommandResult<T>pattern for clean error handlingTesting Strategy
Link Format
Example:
Changes Overview
Testing
All tests pass in Docker environment:
Breaking Changes
None - this is the initial implementation.
Documentation
CLAUDE.mdwith testing principles andCommandResultpatternF016 Link Hygienefeature specificationlore/CLAUDE_DEV_THOUGHTS.mdTASKLIST.mdto reflect completed Phase 1aCloses
F001 (Git Object Storage)F013 (CLI Tools)F016 (Link Hygiene)