# Headless Information Space Service Evolution ## Vision Evolve markitect into a headless markdown transclusion-based information space service that supports: 1. **HTML Rendering Mode** - Render markdown to HTML, track changes, update space 2. **Directory Structure Mode** - Represent information as canonical directory with markdown files 3. **Multiple Frontends** - Support different interaction modes via clean API layer ## What is an Information Space? An Information Space is a first-class abstraction that: - Contains a collection of documents with transclusion relationships - Maintains persistent context for variable resolution - Tracks document dependencies for cache invalidation - Can be rendered to HTML or exported to directory structure - Supports event-driven updates and subscriptions - Can reference other spaces (composability) ## Key Capabilities | Phase | Capability | Description | |-------|-----------|-------------| | 1 | InformationSpace Entity | Space abstraction with identity, metadata, lifecycle | | 2 | Event System | In-process pub/sub for space events | | 3 | Persistent Transclusion | Store context state, track references | | 4 | HTML Rendering | Render resolved markdown to HTML with caching | | 5 | Directory Mode | Bidirectional sync with filesystem | | 6 | API Layer | GraphQL, REST, CLI interfaces | | 7 | Composability | Space references and inheritance | | 8 | Git History | Optional git-based version control | ## Architecture Overview ``` ┌─────────────────────────────────────────────────────────────┐ │ API Layer │ │ GraphQL Schema │ REST Endpoints │ CLI Commands │ ├─────────────────────────────────────────────────────────────┤ │ Service Layer │ │ SpaceService │ RenderService │ SyncService │ ├─────────────────────────────────────────────────────────────┤ │ Domain Layer │ │ InformationSpace │ SpaceDocument │ SpaceEvent │ EventBus │ │ PersistentTransclusionContext │ ReferenceGraph │ ├─────────────────────────────────────────────────────────────┤ │ Storage Layer │ │ SpaceRepository │ EventStore │ Cache Backend │ ├─────────────────────────────────────────────────────────────┤ │ Existing Markitect │ │ DatabaseManager │ TransclusionEngine │ VariantFactory │ │ PluginRegistry │ QueryParadigms │ ASTService │ └─────────────────────────────────────────────────────────────┘ ``` ## Integration Strategy The Information Space Service builds on existing markitect infrastructure: | Existing Component | Integration | |-------------------|-------------| | `TransclusionContext` | Extended with `PersistentTransclusionContext` | | `VariantFactory` | Used for directory export/import | | `PluginRegistry` | Add SPACE_RENDERER, SPACE_SYNC, EVENT_HANDLER types | | `DatabaseManager` | Add space-related tables | | `GraphQL Schema` | Extend with Space types and mutations | ## Project Status - [ ] **Phase 0**: Project Organization (prerequisite cleanup) - [ ] **Phase 1**: Foundation (Space entity, repository) - [ ] **Phase 2**: Event System - [ ] **Phase 3**: Persistent Transclusion - [ ] **Phase 4**: HTML Rendering Mode - [ ] **Phase 5**: Directory Mode - [ ] **Phase 6**: API Layer - [ ] **Phase 7**: Composability - [ ] **Phase 8**: Git History (optional) ## Documentation - [WORKPLAN.md](WORKPLAN.md) - Detailed implementation workplan - [PROJECT_STRUCTURE.md](../../PROJECT_STRUCTURE.md) - Current project structure ## Usage Example (Target State) ```python from markitect.spaces import SpaceService, InformationSpace # Create a space service = SpaceService() space = await service.create_space("my-docs", description="Documentation space") # Add documents await service.add_document(space, "/intro.md", content="# Introduction") await service.add_document(space, "/getting-started.md", content="# Getting Started") # Render to HTML html_output = await service.render(space, theme="default") # Export to directory await service.export_to_directory(space, "./output/") # Watch for changes async for event in service.subscribe(space): print(f"Change detected: {event.type} on {event.document_path}") ``` ## CLI Commands (Target State) ```bash # Space management markitect space create my-space --description "My documentation" markitect space list markitect space show my-space # Document management markitect space add-doc my-space --path "/intro.md" --file ./intro.md markitect space list-docs my-space # Rendering markitect space render my-space --output ./html/ --theme default # Directory sync markitect space sync my-space --directory ./my-space-dir/ --bidirectional # History (Phase 8) markitect space history log my-space markitect space history diff my-space --rev HEAD~1 ``` ## Contributing See the main project CONTRIBUTING.md for guidelines. For this initiative specifically: 1. Follow the phased implementation order 2. Write tests before implementing features 3. Update documentation as you go 4. Use the event system for loose coupling 5. Maintain backward compatibility