feat(prompts): implement Phase 1 - Foundation (FR-1)
Implement addressable artifacts with content-based identity and change detection. Core Features: - Artifact model with SHA-256 content digests - ArtifactReference for cross-space addressing - IArtifactRepository interface for pluggable storage - SQLiteArtifactRepository implementation - ArtifactService for high-level operations - Content digest calculation utilities Database: - prompt_artifacts table with indexes - Support for artifact metadata and types - UNIQUE constraint on space_id+name Tests (41 passing): - 26 model tests (metadata, artifacts, references, digests) - 15 repository tests (CRUD, queries, constraints) Implements: - FR-1.1: Unique addressability by name and ID - FR-1.2: Content digest computation and storage - FR-1.3: Cross-space artifact references Files Created: - markitect/prompts/models.py - markitect/prompts/repositories/interfaces.py - markitect/prompts/repositories/sqlite.py - markitect/prompts/services/artifact_service.py - migrations/prompts/001_create_artifacts_table.sql - tests/unit/prompts/test_artifact_models.py - tests/unit/prompts/test_artifact_repository.py Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
34
migrations/prompts/001_create_artifacts_table.sql
Normal file
34
migrations/prompts/001_create_artifacts_table.sql
Normal file
@@ -0,0 +1,34 @@
|
||||
-- Migration 001: Create prompt artifacts table
|
||||
-- Implements FR-1: InformationSpace Addressability
|
||||
-- Date: 2026-02-08
|
||||
|
||||
-- Prompt artifacts table for content-based addressing
|
||||
CREATE TABLE IF NOT EXISTS prompt_artifacts (
|
||||
id TEXT PRIMARY KEY,
|
||||
space_id TEXT NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
artifact_type TEXT NOT NULL,
|
||||
content_digest TEXT NOT NULL,
|
||||
content_size INTEGER DEFAULT 0,
|
||||
metadata JSON,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE(space_id, name)
|
||||
);
|
||||
|
||||
-- Indexes for performance
|
||||
CREATE INDEX IF NOT EXISTS idx_artifacts_space ON prompt_artifacts(space_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_artifacts_digest ON prompt_artifacts(content_digest);
|
||||
CREATE INDEX IF NOT EXISTS idx_artifacts_type ON prompt_artifacts(artifact_type);
|
||||
CREATE INDEX IF NOT EXISTS idx_artifacts_name ON prompt_artifacts(space_id, name);
|
||||
|
||||
-- Comments (for documentation)
|
||||
-- prompt_artifacts.id: Unique UUID identifier for the artifact
|
||||
-- prompt_artifacts.space_id: Reference to information space containing this artifact
|
||||
-- prompt_artifacts.name: Human-readable name, unique within space
|
||||
-- prompt_artifacts.artifact_type: Classification: content, template, generated, schema, config
|
||||
-- prompt_artifacts.content_digest: SHA-256 hash of content for change detection
|
||||
-- prompt_artifacts.content_size: Size of content in bytes
|
||||
-- prompt_artifacts.metadata: JSON extensible metadata (description, tags, author, version, custom)
|
||||
-- prompt_artifacts.created_at: Artifact creation timestamp
|
||||
-- prompt_artifacts.updated_at: Last modification timestamp
|
||||
Reference in New Issue
Block a user