Core changes: - Add @defgroup/@ingroup to 1791 C2+ contracts (555 files) for HCA 128× pre-training DSA grouping - Add §0.1 Pre-Training Frequency matrix to semantics-core - Add §VIII Attention Architecture rules (ATTN_1-4) with MLA/CSA/HCA/DSA mechanics - Add @defgroup/@ingroup to canonical syntax (§II) and all contract examples Agent prompts (5 files): - Add ZERO-STATE RATIONALE with MLA/CSA/HCA/DSA compression mechanics - Add pre-training note: @RATIONALE/@REJECTED are in-context learned tags - svelte-coder: add missing #region contract, fix Svelte rule violations - python-coder/fullstack-coder: honor function contracts from speckit plan - qa-tester: add attention compliance audit (P3 ATTN_1-4 checks) Skills (6 files): - Translate all axiom_config descriptions to English - Fix doc_dirs to index .opencode/ and .specify/ - Deduplicate 5× complexity_rules → single global_tags catalog - Reduce semantics-svelte 591→485 lines (remove duplicate code blocks) - Fix semantics-testing: 'Short IDs' → 'Short hierarchical IDs' - Fix all examples: flat IDs → hierarchical Domain.Name format - Fix Svelte examples: replace raw Tailwind + <button> with semantic tokens + /ui Speckit workflow (commands + templates): - speckit.plan: add Function-Level Contracts for C3+ with @PRE/@POST/@TEST_EDGE - speckit.plan: add Attention Compliance Gate (ATTN_1-4 before contract generation) - speckit.tasks: add function contract inlining format (constraints in task description) - speckit.specify: load semantics-core for spec density rules - spec-template: add #region contract, @SEMANTICS grouping, hierarchical IDs - ux-reference-template: add #region wrapper - plan-template: add attention gate, @defgroup/@ingroup guidance - tasks-template: add attention audit + rebuild + orphan check tasks - constitution.md: translate to English, add Principle VIII (attention-optimized contracts) Reference modules rewritten (hierarchical IDs + full contracts): - Auth.Jwt: 6 child contracts with @RATIONALE/@REJECTED/@TEST_EDGE - Api.Auth: 5 endpoints with @TEST_EDGE + molecular CoT markers - Migration.Model: @defgroup Migration with 18 @ACTION + 6 @INVARIANT Scripts: - add_defgroup_ingroup.py: zero-risk additive @ingroup migration (1791 insertions) - migrate_hierarchical.py: flat→hierarchical ID dry-run analysis (792 contracts) - merge_prompts.py: merge all prompts/skills/commands into one review file Config: - axiom_config.yaml: 749→395 lines (-47%), English, doc_dirs include prompts - Fix test_datasets.py import collision (rename → test_datasets_routes.py) - Fix test_preview.py: SupersetClient→get_superset_client, AsyncMock, logger f-string
109 lines
4.5 KiB
Python
109 lines
4.5 KiB
Python
# #region MappingModels [C:5] [TYPE Module] [SEMANTICS sqlalchemy, mapping, model, schema, resource-type]
|
|
# @defgroup Models Module group.
|
|
#
|
|
# @BRIEF Defines the database schema for environment metadata and database mappings using SQLAlchemy.
|
|
# @LAYER Domain
|
|
# @RELATION DEPENDS_ON -> [EXT:Library:sqlalchemy]
|
|
|
|
#
|
|
# @INVARIANT All primary keys are UUID strings.
|
|
# CONSTRAINT: source_env_id and target_env_id must be valid environment IDs.
|
|
# @PRE Database engine initialized
|
|
# @POST Mapping ORM models registered with UUID primary keys
|
|
# @SIDE_EFFECT Defines environment/database/resource mapping tables
|
|
# @DATA_CONTRACT MappingData -> MappingRecord
|
|
|
|
import enum
|
|
import uuid
|
|
|
|
from sqlalchemy import Boolean, Column, DateTime, Enum as SQLEnum, ForeignKey, String
|
|
from sqlalchemy.orm import declarative_base
|
|
from sqlalchemy.sql import func
|
|
|
|
# #region Base [C:1] [TYPE Class]
|
|
# @BRIEF SQLAlchemy declarative base for all domain models.
|
|
# #endregion Base
|
|
Base = declarative_base()
|
|
|
|
# #region ResourceType [C:1] [TYPE Class]
|
|
# @BRIEF Enumeration of possible Superset resource types for ID mapping.
|
|
class ResourceType(str, enum.Enum):
|
|
CHART = "chart"
|
|
DATASET = "dataset"
|
|
DASHBOARD = "dashboard"
|
|
# #endregion ResourceType
|
|
|
|
|
|
# #region MigrationStatus [C:1] [TYPE Class]
|
|
# @BRIEF Enumeration of possible migration job statuses.
|
|
class MigrationStatus(enum.Enum):
|
|
PENDING = "PENDING"
|
|
RUNNING = "RUNNING"
|
|
COMPLETED = "COMPLETED"
|
|
FAILED = "FAILED"
|
|
AWAITING_MAPPING = "AWAITING_MAPPING"
|
|
# #endregion MigrationStatus
|
|
|
|
# #region Environment [C:3] [TYPE Class]
|
|
# @defgroup Models Module group.
|
|
# @BRIEF Represents a Superset instance environment.
|
|
# @RELATION DEPENDS_ON -> MappingModels
|
|
class Environment(Base):
|
|
__tablename__ = "environments"
|
|
|
|
id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4()))
|
|
name = Column(String, nullable=False)
|
|
url = Column(String, nullable=False)
|
|
credentials_id = Column(String, nullable=False)
|
|
# #endregion Environment
|
|
|
|
# #region DatabaseMapping [C:3] [TYPE Class]
|
|
# @defgroup Models Module group.
|
|
# @BRIEF Represents a mapping between source and target databases.
|
|
class DatabaseMapping(Base):
|
|
__tablename__ = "database_mappings"
|
|
|
|
id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4()))
|
|
source_env_id = Column(String, ForeignKey("environments.id", ondelete="CASCADE"), nullable=False)
|
|
target_env_id = Column(String, ForeignKey("environments.id", ondelete="CASCADE"), nullable=False)
|
|
source_db_uuid = Column(String, nullable=False)
|
|
target_db_uuid = Column(String, nullable=False)
|
|
source_db_name = Column(String, nullable=False)
|
|
target_db_name = Column(String, nullable=False)
|
|
engine = Column(String, nullable=True)
|
|
# #endregion DatabaseMapping
|
|
|
|
# #region MigrationJob [C:2] [TYPE Class]
|
|
# @defgroup Models Module group.
|
|
# @BRIEF Represents a single migration execution job.
|
|
class MigrationJob(Base):
|
|
__tablename__ = "migration_jobs"
|
|
|
|
id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4()))
|
|
source_env_id = Column(String, ForeignKey("environments.id", ondelete="CASCADE"), nullable=False)
|
|
target_env_id = Column(String, ForeignKey("environments.id", ondelete="CASCADE"), nullable=False)
|
|
status = Column(SQLEnum(MigrationStatus), default=MigrationStatus.PENDING)
|
|
replace_db = Column(Boolean, default=False)
|
|
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
|
# #endregion MigrationJob
|
|
|
|
# #region ResourceMapping [C:3] [TYPE Class]
|
|
# @defgroup Models Module group.
|
|
# @BRIEF Maps a universal UUID for a resource to its actual ID on a specific environment.
|
|
# @TEST_DATA: resource_mapping_record -> {'environment_id': 'prod-env-1', 'resource_type': 'chart', 'uuid': '123e4567-e89b-12d3-a456-426614174000', 'remote_integer_id': '42'}
|
|
# @RELATION DEPENDS_ON -> MappingModels
|
|
class ResourceMapping(Base):
|
|
__tablename__ = "resource_mappings"
|
|
|
|
id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4()))
|
|
environment_id = Column(String, ForeignKey("environments.id", ondelete="CASCADE"), nullable=False)
|
|
resource_type = Column(SQLEnum(ResourceType), nullable=False)
|
|
uuid = Column(String, nullable=False)
|
|
remote_integer_id = Column(String, nullable=False) # Stored as string to handle potentially large or composite IDs safely, though Superset usually uses integers.
|
|
resource_name = Column(String, nullable=True) # Used for UI display
|
|
last_synced_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())
|
|
# #endregion ResourceMapping
|
|
|
|
# #endregion MappingModels
|
|
|