chore: moved information-space service to history
Some checks failed
Test Suite / unit-tests (3.11) (push) Has been cancelled
Test Suite / unit-tests (3.12) (push) Has been cancelled
Test Suite / integration-tests (push) Has been cancelled
Test Suite / e2e-tests (push) Has been cancelled
Test Suite / performance-tests (push) Has been cancelled
Test Suite / code-quality (push) Has been cancelled
Test Suite / security-scan (push) Has been cancelled
Test Suite / test-summary (push) Has been cancelled
Some checks failed
Test Suite / unit-tests (3.11) (push) Has been cancelled
Test Suite / unit-tests (3.12) (push) Has been cancelled
Test Suite / integration-tests (push) Has been cancelled
Test Suite / e2e-tests (push) Has been cancelled
Test Suite / performance-tests (push) Has been cancelled
Test Suite / code-quality (push) Has been cancelled
Test Suite / security-scan (push) Has been cancelled
Test Suite / test-summary (push) Has been cancelled
This commit is contained in:
@@ -1,142 +0,0 @@
|
||||
# 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
|
||||
@@ -1,714 +0,0 @@
|
||||
# Headless Information Space Service - Implementation Workplan
|
||||
|
||||
## Overview
|
||||
|
||||
This workplan details the implementation phases for evolving markitect into a headless markdown transclusion-based information space service.
|
||||
|
||||
---
|
||||
|
||||
## Phase 0: Project Organization (Prerequisite)
|
||||
|
||||
### Current State Issues
|
||||
- **Hybrid layout** - Mix of root-level packages and monolithic `/markitect/`
|
||||
- **Flat root in markitect** - 34 .py files at `/markitect/` root level
|
||||
- **No structure documentation** - Missing PROJECT_STRUCTURE.md (now created)
|
||||
|
||||
### Reorganization Tasks
|
||||
|
||||
| ID | Task | Description | Status |
|
||||
|----|------|-------------|--------|
|
||||
| ORG-001 | Create PROJECT_STRUCTURE.md | Document current layout and rationale | Done |
|
||||
| ORG-002 | Create `/markitect/core/` | Move parser, serializer, document_manager | Pending |
|
||||
| ORG-003 | Create `/markitect/schema/` | Consolidate 6 schema_*.py files | Pending |
|
||||
| ORG-004 | Create `/markitect/storage/` | Group database.py, cache modules | Pending |
|
||||
| ORG-005 | Update imports | Fix all import statements after moves | Pending |
|
||||
| ORG-006 | Verify tests | Ensure all tests pass after moves | Pending |
|
||||
|
||||
### Target Structure After Phase 0
|
||||
|
||||
```
|
||||
markitect/
|
||||
├── core/ # Core infrastructure
|
||||
│ ├── __init__.py
|
||||
│ ├── parser.py # (from markitect/)
|
||||
│ ├── serializer.py # (from markitect/)
|
||||
│ ├── document_manager.py # (from markitect/)
|
||||
│ └── workspace.py # (from markitect/)
|
||||
├── schema/ # Schema management
|
||||
│ ├── __init__.py
|
||||
│ ├── validator.py # (from schema_validator.py)
|
||||
│ ├── generator.py # (from schema_generator.py)
|
||||
│ ├── loader.py # (from schema_loader.py)
|
||||
│ ├── analyzer.py # (from schema_analyzer.py)
|
||||
│ ├── refiner.py # (from schema_refiner.py)
|
||||
│ └── naming.py # (from schema_naming.py)
|
||||
├── storage/ # Storage concerns
|
||||
│ ├── __init__.py
|
||||
│ └── database.py # (from markitect/)
|
||||
└── spaces/ # Information spaces (Phase 1+)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 1: Foundation
|
||||
|
||||
### Capability Requirements
|
||||
|
||||
| ID | Capability | Description | Priority |
|
||||
|----|-----------|-------------|----------|
|
||||
| CAP-001 | InformationSpace Entity | First-class space abstraction with identity, metadata, lifecycle | Critical |
|
||||
| CAP-002 | SpaceRepository | CRUD operations for spaces with SQLite backing | Critical |
|
||||
| CAP-003 | Document-Space Association | Link documents to spaces with membership tracking | Critical |
|
||||
| CAP-004 | Space Metadata Schema | Extensible metadata schema for space configuration | High |
|
||||
| CAP-005 | Database Migrations | Schema evolution for space-related tables | High |
|
||||
|
||||
### Implementation Tasks
|
||||
|
||||
**Week 1: Core Models**
|
||||
- Create `markitect/spaces/models.py`
|
||||
- `InformationSpace` dataclass with id, name, description, metadata, config
|
||||
- `SpaceDocument` dataclass for document membership
|
||||
- `SpaceConfig` dataclass for space settings
|
||||
- Create `markitect/spaces/repositories/interfaces.py`
|
||||
- Unit tests for models
|
||||
|
||||
**Week 2: Repository Implementation**
|
||||
- Create `markitect/spaces/repositories/sqlite.py`
|
||||
- Implement `ISpaceRepository` for SQLite
|
||||
- Implement `IDocumentAssociationRepository`
|
||||
- Database migration scripts
|
||||
- Repository unit tests
|
||||
|
||||
**Week 3: Basic SpaceService**
|
||||
- Create `markitect/spaces/services/space_service.py`
|
||||
- CRUD operations for spaces
|
||||
- Document add/remove operations
|
||||
- Integration tests
|
||||
|
||||
### Database Schema
|
||||
|
||||
```sql
|
||||
CREATE TABLE spaces (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT UNIQUE NOT NULL,
|
||||
description TEXT,
|
||||
metadata JSON,
|
||||
config JSON,
|
||||
parent_space_id TEXT REFERENCES spaces(id),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE space_documents (
|
||||
id TEXT PRIMARY KEY,
|
||||
space_id TEXT NOT NULL REFERENCES spaces(id),
|
||||
document_id TEXT NOT NULL,
|
||||
space_path TEXT NOT NULL,
|
||||
order_index INTEGER DEFAULT 0,
|
||||
metadata JSON,
|
||||
added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE(space_id, space_path)
|
||||
);
|
||||
```
|
||||
|
||||
### Verification
|
||||
```bash
|
||||
pytest tests/unit/spaces/test_*_model.py
|
||||
pytest tests/unit/spaces/test_*_repository.py
|
||||
pytest tests/integration/spaces/test_space_service_integration.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 2: Event System
|
||||
|
||||
### Capability Requirements
|
||||
|
||||
| ID | Capability | Description | Priority |
|
||||
|----|-----------|-------------|----------|
|
||||
| CAP-010 | SpaceEvent Base | Event dataclass with type, payload, timestamp | Critical |
|
||||
| CAP-011 | Event Bus | In-process publish/subscribe for space events | Critical |
|
||||
| CAP-012 | Event Handlers Registry | Register/unregister event handlers by type | High |
|
||||
| CAP-013 | Change Detection | Detect document changes via content hash comparison | High |
|
||||
| CAP-014 | Event Persistence | Store events for replay/audit | Medium |
|
||||
|
||||
### Implementation Tasks
|
||||
|
||||
**Week 4: Event Infrastructure**
|
||||
- Create `markitect/spaces/events/models.py`
|
||||
- `SpaceEvent` dataclass with event_id, type, space_id, payload, timestamp
|
||||
- `SpaceEventType` enum (DOCUMENT_ADDED, DOCUMENT_UPDATED, DOCUMENT_REMOVED, etc.)
|
||||
- Create `markitect/spaces/events/bus.py`
|
||||
- `EventBus` with sync/async handler support
|
||||
- Handler registration by event type
|
||||
- Unit tests for event bus
|
||||
|
||||
**Week 5: Integration**
|
||||
- Wire events into SpaceService (emit on document operations)
|
||||
- Implement change detection (content hash comparison)
|
||||
- Optional: event persistence table
|
||||
- Integration tests for event flow
|
||||
|
||||
### Event Types
|
||||
|
||||
```python
|
||||
class SpaceEventType(Enum):
|
||||
SPACE_CREATED = "space.created"
|
||||
SPACE_UPDATED = "space.updated"
|
||||
SPACE_DELETED = "space.deleted"
|
||||
DOCUMENT_ADDED = "document.added"
|
||||
DOCUMENT_UPDATED = "document.updated"
|
||||
DOCUMENT_REMOVED = "document.removed"
|
||||
DOCUMENT_MOVED = "document.moved"
|
||||
VARIABLE_SET = "variable.set"
|
||||
RENDER_COMPLETED = "render.completed"
|
||||
SYNC_COMPLETED = "sync.completed"
|
||||
```
|
||||
|
||||
### Verification
|
||||
```bash
|
||||
pytest tests/unit/spaces/test_event_bus.py
|
||||
pytest tests/integration/spaces/test_event_propagation.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 3: Persistent Transclusion Context
|
||||
|
||||
### Capability Requirements
|
||||
|
||||
| ID | Capability | Description | Priority |
|
||||
|----|-----------|-------------|----------|
|
||||
| CAP-020 | Persistent TransclusionContext | Store context state in database | Critical |
|
||||
| CAP-021 | Cross-Space References | Resolve transclusions across space boundaries | High |
|
||||
| CAP-022 | Reference Graph | Track document dependencies for invalidation | High |
|
||||
| CAP-023 | Variable Scope Layers | Space-level, document-level, request-level variables | Medium |
|
||||
| CAP-024 | Transclusion Cache Invalidation | Invalidate rendered content on dependency change | High |
|
||||
|
||||
### Implementation Tasks
|
||||
|
||||
**Week 6: Persistent Context**
|
||||
- Create `markitect/spaces/transclusion/persistent_context.py`
|
||||
- Extend existing `TransclusionContext` with DB persistence
|
||||
- Space-scoped variable storage
|
||||
|
||||
**Week 7: Reference Graph**
|
||||
- Implement reference tracking during transclusion resolution
|
||||
- Cross-space reference resolution with space:// protocol
|
||||
- Variable scope layers (space → document → request)
|
||||
|
||||
**Week 8: Cache Invalidation**
|
||||
- Wire change events to cache invalidation
|
||||
- Dependency-aware cache clearing
|
||||
- Integration tests
|
||||
|
||||
### Database Schema Additions
|
||||
|
||||
```sql
|
||||
CREATE TABLE space_variables (
|
||||
space_id TEXT NOT NULL REFERENCES spaces(id),
|
||||
name TEXT NOT NULL,
|
||||
value JSON,
|
||||
scope TEXT DEFAULT 'space',
|
||||
PRIMARY KEY(space_id, name)
|
||||
);
|
||||
|
||||
CREATE TABLE transclusion_references (
|
||||
source_doc_id TEXT NOT NULL,
|
||||
target_doc_id TEXT NOT NULL,
|
||||
space_id TEXT NOT NULL REFERENCES spaces(id),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY(source_doc_id, target_doc_id, space_id)
|
||||
);
|
||||
```
|
||||
|
||||
### Verification
|
||||
```bash
|
||||
pytest tests/unit/spaces/test_persistent_context.py
|
||||
pytest tests/unit/spaces/test_reference_graph.py
|
||||
pytest tests/integration/spaces/test_transclusion_persistence.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 4: HTML Rendering Mode
|
||||
|
||||
### Capability Requirements
|
||||
|
||||
| ID | Capability | Description | Priority |
|
||||
|----|-----------|-------------|----------|
|
||||
| CAP-030 | SpaceRenderer Base | Abstract renderer interface | Critical |
|
||||
| CAP-031 | MarkdownToHTMLRenderer | Render resolved markdown to HTML | Critical |
|
||||
| CAP-032 | Rendering Cache | Cache rendered output with invalidation | High |
|
||||
| CAP-033 | Theme Support | Apply themes to rendered HTML | Medium |
|
||||
| CAP-034 | Incremental Rendering | Re-render only changed documents | Medium |
|
||||
|
||||
### Implementation Tasks
|
||||
|
||||
**Week 9: Renderer Base**
|
||||
- Create `markitect/spaces/rendering/base.py` - SpaceRenderer ABC
|
||||
- Create `markitect/spaces/rendering/html_renderer.py` - MarkdownToHTMLRenderer
|
||||
- Integrate with existing `CleanDocumentManager`
|
||||
|
||||
**Week 10: Caching and Themes**
|
||||
- Implement render output caching (keyed by content hash)
|
||||
- Theme integration using existing theme system
|
||||
- Invalidation on dependency change via events
|
||||
|
||||
**Week 11: Incremental Rendering**
|
||||
- Re-render only affected documents on change
|
||||
- Rendering events emission
|
||||
- E2E tests for render workflow
|
||||
|
||||
### Verification
|
||||
```bash
|
||||
pytest tests/e2e/spaces/test_html_rendering_workflow.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 5: Directory Mode
|
||||
|
||||
### Capability Requirements
|
||||
|
||||
| ID | Capability | Description | Priority |
|
||||
|----|-----------|-------------|----------|
|
||||
| CAP-040 | SpaceToDirectory Exporter | Export space to canonical directory structure | Critical |
|
||||
| CAP-041 | DirectoryToSpace Importer | Import directory structure as space | Critical |
|
||||
| CAP-042 | Bidirectional Sync | Detect and sync changes both directions | High |
|
||||
| CAP-043 | Filesystem Watcher | Watch directory for external changes | Medium |
|
||||
| CAP-044 | Conflict Resolution | Handle conflicts in bidirectional sync | Medium |
|
||||
|
||||
### Implementation Tasks
|
||||
|
||||
**Week 12: Export**
|
||||
- Create `markitect/spaces/sync/directory_exporter.py`
|
||||
- Integrate with existing `VariantFactory`
|
||||
- Support flat/hierarchical/semantic variants
|
||||
|
||||
**Week 13: Import and Sync**
|
||||
- Create `markitect/spaces/sync/directory_importer.py`
|
||||
- Create `markitect/spaces/sync/bidirectional.py`
|
||||
- Conflict detection (modification time, content hash)
|
||||
|
||||
**Week 14: Filesystem Watcher**
|
||||
- Implement watcher using `watchdog` library
|
||||
- Sync events emission
|
||||
- E2E tests for bidirectional sync
|
||||
|
||||
### Canonical Directory Structure
|
||||
|
||||
```
|
||||
.markitect/spaces/{space-name}/
|
||||
├── .space.yaml # Space metadata and config
|
||||
├── documents/ # Document files
|
||||
│ ├── intro.md
|
||||
│ ├── getting-started.md
|
||||
│ └── advanced/
|
||||
│ └── topics.md
|
||||
└── assets/ # Associated assets
|
||||
```
|
||||
|
||||
### Verification
|
||||
```bash
|
||||
pytest tests/e2e/spaces/test_directory_mode_workflow.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 6: API Layer
|
||||
|
||||
### Capability Requirements
|
||||
|
||||
| ID | Capability | Description | Priority |
|
||||
|----|-----------|-------------|----------|
|
||||
| CAP-060 | SpaceService | Service layer orchestrating space operations | Critical |
|
||||
| CAP-061 | GraphQL Space Schema | Extend existing GraphQL with space types | High |
|
||||
| CAP-062 | REST Endpoints | Alternative REST API for spaces | Medium |
|
||||
| CAP-063 | WebSocket Subscriptions | Real-time event subscriptions | Medium |
|
||||
| CAP-064 | CLI Space Commands | CLI commands for space management | High |
|
||||
|
||||
### Implementation Tasks
|
||||
|
||||
**Week 15: GraphQL Extension**
|
||||
- Extend `markitect/graphql/schema.py` with Space types
|
||||
- Add mutations: createSpace, updateSpace, deleteSpace
|
||||
- Add queries: space, spaces, spaceDocuments
|
||||
- Add subscriptions: onSpaceEvent
|
||||
|
||||
**Week 16: CLI Commands**
|
||||
- Add to `markitect/cli.py`:
|
||||
- `markitect space create/list/show/delete`
|
||||
- `markitect space add-doc/remove-doc/list-docs`
|
||||
- `markitect space render`
|
||||
- `markitect space sync`
|
||||
|
||||
**Week 17: WebSocket and Polish**
|
||||
- WebSocket subscriptions for real-time events
|
||||
- Documentation updates
|
||||
- Final integration testing
|
||||
|
||||
### GraphQL Schema Extensions
|
||||
|
||||
```graphql
|
||||
type InformationSpace {
|
||||
id: ID!
|
||||
name: String!
|
||||
description: String
|
||||
documents: [SpaceDocument!]!
|
||||
config: SpaceConfig!
|
||||
parentSpace: InformationSpace
|
||||
createdAt: DateTime!
|
||||
updatedAt: DateTime!
|
||||
}
|
||||
|
||||
type SpaceDocument {
|
||||
id: ID!
|
||||
spacePath: String!
|
||||
content: String!
|
||||
metadata: JSON
|
||||
}
|
||||
|
||||
type Mutation {
|
||||
createSpace(input: CreateSpaceInput!): InformationSpace!
|
||||
addDocument(spaceId: ID!, input: AddDocumentInput!): SpaceDocument!
|
||||
renderSpace(spaceId: ID!, options: RenderOptions): RenderResult!
|
||||
}
|
||||
|
||||
type Subscription {
|
||||
onSpaceEvent(spaceId: ID!): SpaceEvent!
|
||||
}
|
||||
```
|
||||
|
||||
### Verification
|
||||
```bash
|
||||
pytest tests/integration/spaces/
|
||||
pytest tests/e2e/spaces/
|
||||
markitect space --help # Verify CLI
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 7: Composability
|
||||
|
||||
### Capability Requirements
|
||||
|
||||
| ID | Capability | Description | Priority |
|
||||
|----|-----------|-------------|----------|
|
||||
| CAP-050 | Space References | Spaces can reference other spaces | High |
|
||||
| CAP-051 | Space Inheritance | Child spaces inherit parent context | Medium |
|
||||
| CAP-053 | Space Access Control | Basic permission model for space access | Medium |
|
||||
|
||||
### Implementation Tasks
|
||||
|
||||
**Week 18-19: Space References**
|
||||
- Space-to-space references via space:// protocol
|
||||
- Variable inheritance from parent spaces
|
||||
- Basic access control (read/write/admin)
|
||||
|
||||
**Week 20: Final Integration**
|
||||
- Complete E2E test suite
|
||||
- Performance testing
|
||||
- User documentation
|
||||
|
||||
### Space Reference Protocol
|
||||
|
||||
```markdown
|
||||
<!-- Reference document from another space -->
|
||||
{{transclude space://other-space/path/to/doc.md}}
|
||||
|
||||
<!-- Reference with variable override -->
|
||||
{{transclude space://shared-components/header.md | title="My Page"}}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 8: Git History Tracking (Optional)
|
||||
|
||||
### Capability Requirements
|
||||
|
||||
| ID | Capability | Description | Priority |
|
||||
|----|-----------|-------------|----------|
|
||||
| CAP-070 | History Configuration | Per-space history tracking configuration | High |
|
||||
| CAP-071 | HistoryBackend Interface | Abstract interface for history backends | High |
|
||||
| CAP-072 | GitHistoryBackend | Git implementation of history backend | High |
|
||||
| CAP-073 | Canonical Directory Binding | Bind space to canonical directory for git | High |
|
||||
| CAP-074 | Event-Driven Commits | Commit on document change events | Medium |
|
||||
| CAP-075 | History Query API | Query commits, diffs, branches | High |
|
||||
| CAP-076 | History CLI Commands | CLI for log, diff, restore, checkout | High |
|
||||
| CAP-077 | Versioned Read/Render | Read/render documents at specific versions | Medium |
|
||||
|
||||
### Implementation Tasks
|
||||
|
||||
**Week 21: History Infrastructure**
|
||||
- Create `markitect/spaces/history/interfaces.py` - IHistoryBackend ABC
|
||||
- Create `markitect/spaces/history/models.py` - Commit, HistoryEntry dataclasses
|
||||
- Add `SpaceConfig` fields: history_enabled, history_backend, history_options
|
||||
- Add `SPACE_SYNC` to PluginType enum
|
||||
|
||||
**Week 22: Git Backend**
|
||||
- Create `markitect/spaces/history/git_backend.py`
|
||||
- Leverage existing `legacy/git_tracker.py` patterns
|
||||
- Create event handlers for auto-commit on document changes
|
||||
- Integration tests
|
||||
|
||||
**Week 23: API and CLI**
|
||||
- History query service for log, diff, branches
|
||||
- CLI commands: `markitect space history log/diff/restore/checkout`
|
||||
- Extend read/render with `--version` option
|
||||
- E2E tests
|
||||
|
||||
### Integration Diagram
|
||||
|
||||
```
|
||||
Document Update Flow (with history enabled):
|
||||
|
||||
User updates document
|
||||
│
|
||||
▼
|
||||
┌───────────────────┐
|
||||
│ SpaceService │
|
||||
│ update_document()│
|
||||
└────────┬──────────┘
|
||||
│ emit event
|
||||
▼
|
||||
┌───────────────────┐ ┌─────────────────────┐
|
||||
│ Event Bus │────▶│ GitHistoryHandler │
|
||||
│ DOCUMENT_UPDATED │ │ (subscribed) │
|
||||
└───────────────────┘ └──────────┬──────────┘
|
||||
│
|
||||
┌──────────▼──────────┐
|
||||
│ DirectorySyncService │
|
||||
└──────────┬──────────┘
|
||||
│ writes to
|
||||
┌──────────▼──────────┐
|
||||
│ Canonical Directory │
|
||||
│ .markitect/spaces/X/ │
|
||||
└──────────┬──────────┘
|
||||
│
|
||||
┌──────────▼──────────┐
|
||||
│ GitHistoryBackend │
|
||||
│ git add && git commit│
|
||||
└─────────────────────┘
|
||||
```
|
||||
|
||||
### Verification
|
||||
```bash
|
||||
markitect space create my-space --history-enabled
|
||||
markitect space add-doc my-space --content "# V1"
|
||||
markitect space update-doc my-space/doc.md --content "# V2"
|
||||
markitect space history log my-space
|
||||
markitect space history diff my-space --rev HEAD~1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Timeline Summary
|
||||
|
||||
| Phase | Focus | Duration |
|
||||
|-------|-------|----------|
|
||||
| 0 | Project Organization | 1 week |
|
||||
| 1 | Foundation | 3 weeks |
|
||||
| 2 | Event System | 2 weeks |
|
||||
| 3 | Persistent Transclusion | 3 weeks |
|
||||
| 4 | HTML Rendering Mode | 3 weeks |
|
||||
| 5 | Directory Mode | 3 weeks |
|
||||
| 6 | API Layer | 3 weeks |
|
||||
| 7 | Composability | 3 weeks |
|
||||
| 8 | Git History (Optional) | 3 weeks |
|
||||
|
||||
**Total: 21-24 weeks** (5-6 months)
|
||||
|
||||
### Parallel Work Opportunities
|
||||
- Phase 4 (HTML) and Phase 5 (Directory) can run in parallel after Phase 3
|
||||
- Phase 8 can start in parallel with Phase 7
|
||||
- Documentation can be written incrementally
|
||||
- CLI commands can start in parallel with Phase 4/5
|
||||
|
||||
---
|
||||
|
||||
## Files to Create
|
||||
|
||||
### Phase 0
|
||||
```
|
||||
docs/PROJECT_STRUCTURE.md # Done
|
||||
roadmap/information-space-service/ # Done
|
||||
├── README.md # Done
|
||||
└── WORKPLAN.md # This file
|
||||
markitect/core/ # To do
|
||||
markitect/schema/ # To do
|
||||
markitect/storage/ # To do
|
||||
```
|
||||
|
||||
### Phase 1+
|
||||
```
|
||||
markitect/spaces/
|
||||
├── __init__.py
|
||||
├── models.py
|
||||
├── events/
|
||||
│ ├── __init__.py
|
||||
│ ├── models.py
|
||||
│ └── bus.py
|
||||
├── repositories/
|
||||
│ ├── __init__.py
|
||||
│ ├── interfaces.py
|
||||
│ └── sqlite.py
|
||||
├── transclusion/
|
||||
│ ├── __init__.py
|
||||
│ └── persistent_context.py
|
||||
├── rendering/
|
||||
│ ├── __init__.py
|
||||
│ ├── base.py
|
||||
│ └── html_renderer.py
|
||||
├── sync/
|
||||
│ ├── __init__.py
|
||||
│ ├── directory_exporter.py
|
||||
│ ├── directory_importer.py
|
||||
│ └── bidirectional.py
|
||||
├── history/ # Phase 8
|
||||
│ ├── __init__.py
|
||||
│ ├── interfaces.py
|
||||
│ ├── models.py
|
||||
│ ├── git_backend.py
|
||||
│ ├── events.py
|
||||
│ └── queries.py
|
||||
└── services/
|
||||
├── __init__.py
|
||||
└── space_service.py
|
||||
```
|
||||
|
||||
### Test Files
|
||||
```
|
||||
tests/unit/spaces/
|
||||
tests/integration/spaces/
|
||||
tests/e2e/spaces/
|
||||
tests/fixtures/spaces.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Success Criteria
|
||||
|
||||
1. ✅ Phase 0 complete: project reorganized with docs/PROJECT_STRUCTURE.md
|
||||
2. ✅ All phases complete with passing tests
|
||||
3. ✅ HTML rendering mode fully functional
|
||||
4. ✅ Directory mode with bidirectional sync working
|
||||
5. ✅ GraphQL API exposing all space operations
|
||||
6. ✅ CLI commands operational
|
||||
7. ✅ Events propagating correctly
|
||||
8. ✅ Cross-space transclusion resolving
|
||||
|
||||
---
|
||||
|
||||
## Implementation Status: COMPLETE ✅
|
||||
|
||||
**Completed:** February 8, 2026
|
||||
|
||||
All 8 phases of the Information Space Service implementation are complete.
|
||||
|
||||
### Final Statistics
|
||||
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| **Total Tests** | 421 passing |
|
||||
| **Implementation Time** | Phases 0-8 complete |
|
||||
| **Commits** | 8 feature commits |
|
||||
| **Lines of Code** | ~10,000+ (spaces module) |
|
||||
|
||||
### Phase Completion Summary
|
||||
|
||||
| Phase | Status | Tests | Key Deliverables |
|
||||
|-------|--------|-------|------------------|
|
||||
| 0-1 | ✅ Complete | 66 | Space models, SQLite repositories, SpaceService |
|
||||
| 2 | ✅ Complete | 19 | Event system with EventBus, typed events |
|
||||
| 3 | ✅ Complete | 47 | Persistent transclusion context, reference tracking |
|
||||
| 4 | ✅ Complete | 60 | HTML rendering with themes (github, dark, minimal, academic) |
|
||||
| 5 | ✅ Complete | 45 | Directory sync (export, import, bidirectional) |
|
||||
| 6 | ✅ Complete | 38 | GraphQL schema, CLI commands, resolvers |
|
||||
| 7 | ✅ Complete | 57 | Space references, variable/config inheritance, access control |
|
||||
| 8 | ✅ Complete | 43 | Git history tracking with event-driven commits |
|
||||
|
||||
### Key Achievements
|
||||
|
||||
**Architecture:**
|
||||
- ✅ Clean layered architecture (models → repositories → services → API)
|
||||
- ✅ Event-driven design enabling extensibility
|
||||
- ✅ Interface-based abstractions (ISpaceRepository, IHistoryBackend, etc.)
|
||||
- ✅ Composable space hierarchies with inheritance
|
||||
- ✅ Plugin-ready architecture (SPACE_RENDERER, SPACE_SYNC types)
|
||||
|
||||
**Features:**
|
||||
- ✅ First-class Information Space abstraction
|
||||
- ✅ Full lifecycle management (draft → active → archived)
|
||||
- ✅ Persistent transclusion context with cross-space references
|
||||
- ✅ Reference graph for dependency tracking
|
||||
- ✅ HTML rendering with multiple themes and caching
|
||||
- ✅ Bidirectional directory synchronization
|
||||
- ✅ Conflict resolution strategies
|
||||
- ✅ GraphQL API with queries and mutations
|
||||
- ✅ CLI with 16 space management commands
|
||||
- ✅ Variable inheritance through parent chains
|
||||
- ✅ Config inheritance with source tracking
|
||||
- ✅ Access control with roles and permissions
|
||||
- ✅ Optional git-based version control
|
||||
- ✅ Event-driven auto-commits
|
||||
- ✅ History queries (log, diff, restore)
|
||||
|
||||
**Quality:**
|
||||
- ✅ Comprehensive test coverage (421 tests)
|
||||
- ✅ All tests passing
|
||||
- ✅ No regressions in existing functionality
|
||||
- ✅ Clean git history with co-authored commits
|
||||
|
||||
### Architecture Validation
|
||||
|
||||
The git history feature (Phase 8) successfully validated the architecture's extensibility:
|
||||
- Event bus enables loose coupling for optional features
|
||||
- Directory sync provides canonical structure for git tracking
|
||||
- Plugin system supports swappable backends
|
||||
- Zero overhead when disabled
|
||||
|
||||
### Files Created/Modified
|
||||
|
||||
**Created (58 new files):**
|
||||
- `markitect/spaces/` - Complete spaces module with 7 subpackages
|
||||
- `tests/unit/spaces/` - 8 comprehensive test files
|
||||
- Documentation and structure files
|
||||
|
||||
**Key Modules:**
|
||||
- `models.py` - Core domain models
|
||||
- `repositories/` - SQLite implementations
|
||||
- `services/` - Business logic orchestration
|
||||
- `events/` - Event system
|
||||
- `transclusion/` - Persistent context
|
||||
- `rendering/` - HTML output with themes
|
||||
- `sync/` - Directory synchronization
|
||||
- `composability/` - Inheritance and references
|
||||
- `history/` - Git version control
|
||||
- `graphql/` - API schema and resolvers
|
||||
- `cli.py` - Command-line interface
|
||||
|
||||
### Next Steps (Optional)
|
||||
|
||||
While all planned phases are complete, potential future enhancements:
|
||||
1. REST API alternative to GraphQL
|
||||
2. WebSocket subscriptions for real-time updates
|
||||
3. Additional rendering backends (PDF, EPUB)
|
||||
4. Cloud sync backends (S3, GitHub)
|
||||
5. Advanced search and indexing
|
||||
6. Collaborative editing features
|
||||
7. Space templates and scaffolding
|
||||
8. Performance optimizations for large spaces
|
||||
|
||||
---
|
||||
|
||||
## Conclusion
|
||||
|
||||
The Information Space Service has been successfully implemented according to the workplan. All success criteria have been met, and the architecture has proven extensible and maintainable. The implementation demonstrates:
|
||||
|
||||
- Clean separation of concerns
|
||||
- Event-driven extensibility
|
||||
- Comprehensive test coverage
|
||||
- Production-ready quality
|
||||
|
||||
**Status: Ready for production use** ✅
|
||||
Reference in New Issue
Block a user