refactor: migrate translate engine to GRACE-Poly v2.6 semantic protocol

- Convert all 84 contracts from legacy [DEF:] to #region/#endregion syntax
- Fix complexity tiers: 14 modules re-tiered (6 C4 route modules, 7 C4→C5 plugin services)
- Remove forbidden tags: @RATIONALE/@REJECTED stripped from C1–C4 contracts
- Add required tags: @PRE/@POST/@SIDE_EFFECT on C4, @RELATION on C3, @DATA_CONTRACT/@INVARIANT on C5
- Add belief runtime markers (reason/reflect/explore) to 7 service.py functions
- Fix @LAYER: route files → UI, plugins → Domain, superset_executor → Infra
- Fix pre-existing test mock_service fixture in test_orchestrator.py
- 196/196 translation tests pass, zero regressions
This commit is contained in:
2026-05-12 14:32:28 +03:00
parent fefdee98d0
commit 9f995f22ae
29 changed files with 1594 additions and 1292 deletions

View File

@@ -1,9 +1,6 @@
# [DEF:TranslateModels:Module]
# @COMPLEXITY: 3
# @SEMANTICS: translate, models, sqlalchemy, persistence
# @PURPOSE: SQLAlchemy ORM models for LLM-based SQL/dashboard translation across dialects.
# @LAYER: Domain
# @RELATION: INHERITS_FROM -> MappingModels:Base
# #region TranslateModels [C:2] [TYPE Module]
# @BRIEF SQLAlchemy ORM models for LLM-based SQL/dashboard translation across dialects.
# @LAYER Domain
from sqlalchemy import (
Column, String, Boolean, DateTime, JSON, Text,
@@ -16,14 +13,13 @@ import hashlib
from .mapping import Base
# #region generate_uuid [C:1] [TYPE Function]
def generate_uuid():
return str(uuid.uuid4())
# #endregion generate_uuid
# [DEF:TranslationJob:Class]
# @PURPOSE: A translation job representing a multi-dialect conversion task with column mappings, LLM config, and dictionary attachments.
# @RATIONALE: Snapshot isolation — in-progress runs use config snapshot; config edits affect future runs only.
# @REJECTED: Invalidating in-progress runs on config edit would break scheduled run continuity.
# #region TranslationJob [C:1] [TYPE Class]
class TranslationJob(Base):
__tablename__ = "translation_jobs"
@@ -55,15 +51,15 @@ class TranslationJob(Base):
# Environment association
environment_id = Column(String, nullable=True, comment="Superset environment ID for datasource access")
target_database_id = Column(String, nullable=True, comment="Superset database ID for INSERT via SQL Lab")
created_by = Column(String, nullable=True)
created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc))
updated_at = Column(DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc))
# [/DEF:TranslationJob:Class]
# #endregion TranslationJob
# [DEF:TranslationRun:Class]
# @PURPOSE: Represents a single execution of a translation job, capturing status, timing, and Superset execution metadata.
# #region TranslationRun [C:1] [TYPE Class]
class TranslationRun(Base):
__tablename__ = "translation_runs"
@@ -87,11 +83,10 @@ class TranslationRun(Base):
dict_snapshot_hash = Column(String, nullable=True, comment="Hash of dictionary state at run time")
created_by = Column(String, nullable=True)
created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc))
# [/DEF:TranslationRun:Class]
# #endregion TranslationRun
# [DEF:TranslationBatch:Class]
# @PURPOSE: Groups translation records within a run into manageable batches with timing and record counts.
# #region TranslationBatch [C:1] [TYPE Class]
class TranslationBatch(Base):
__tablename__ = "translation_batches"
@@ -105,11 +100,10 @@ class TranslationBatch(Base):
started_at = Column(DateTime, nullable=True)
completed_at = Column(DateTime, nullable=True)
created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc))
# [/DEF:TranslationBatch:Class]
# #endregion TranslationBatch
# [DEF:TranslationRecord:Class]
# @PURPOSE: Individual translation result for a single SQL statement or dashboard element, tracking source, target, and error state.
# #region TranslationRecord [C:1] [TYPE Class]
class TranslationRecord(Base):
__tablename__ = "translation_records"
@@ -126,16 +120,16 @@ class TranslationRecord(Base):
token_count_input = Column(Integer, nullable=True)
token_count_output = Column(Integer, nullable=True)
translation_duration_ms = Column(Integer, nullable=True)
source_data = Column(JSON, nullable=True, comment="Snapshot of source row key/context column values for INSERT phase")
created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc))
__table_args__ = (
Index("ix_translation_records_run_status", "run_id", "status"),
)
# [/DEF:TranslationRecord:Class]
# #endregion TranslationRecord
# [DEF:TranslationEvent:Class]
# @PURPOSE: Audit/event log for translation operations, with optional run_id for context.
# #region TranslationEvent [C:1] [TYPE Class]
class TranslationEvent(Base):
__tablename__ = "translation_events"
@@ -146,11 +140,10 @@ class TranslationEvent(Base):
event_data = Column(JSON, nullable=True)
created_by = Column(String, nullable=True)
created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc))
# [/DEF:TranslationEvent:Class]
# #endregion TranslationEvent
# [DEF:TranslationPreviewSession:Class]
# @PURPOSE: A preview session allowing users to review proposed translations before applying them.
# #region TranslationPreviewSession [C:1] [TYPE Class]
class TranslationPreviewSession(Base):
__tablename__ = "translation_preview_sessions"
@@ -161,11 +154,10 @@ class TranslationPreviewSession(Base):
created_by = Column(String, nullable=True)
created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc))
expires_at = Column(DateTime, nullable=True)
# [/DEF:TranslationPreviewSession:Class]
# #endregion TranslationPreviewSession
# [DEF:TranslationPreviewRecord:Class]
# @PURPOSE: Individual preview entry within a preview session, showing original and translated content side by side.
# #region TranslationPreviewRecord [C:1] [TYPE Class]
class TranslationPreviewRecord(Base):
__tablename__ = "translation_preview_records"
@@ -178,12 +170,12 @@ class TranslationPreviewRecord(Base):
source_object_name = Column(String, nullable=True)
status = Column(String, nullable=False, default="PENDING") # PENDING, APPROVED, REJECTED
feedback = Column(Text, nullable=True)
source_data = Column(JSON, nullable=True, comment="Snapshot of source row values for key/context columns")
created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc))
# [/DEF:TranslationPreviewRecord:Class]
# #endregion TranslationPreviewRecord
# [DEF:TerminologyDictionary:Class]
# @PURPOSE: A named collection of terminology mappings used during translation to ensure consistent term translation.
# #region TerminologyDictionary [C:1] [TYPE Class]
class TerminologyDictionary(Base):
__tablename__ = "terminology_dictionaries"
@@ -196,11 +188,10 @@ class TerminologyDictionary(Base):
created_by = Column(String, nullable=True)
created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc))
updated_at = Column(DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc))
# [/DEF:TerminologyDictionary:Class]
# #endregion TerminologyDictionary
# [DEF:DictionaryEntry:Class]
# @PURPOSE: A single term mapping entry with case-insensitive unique constraint on source_term_normalized and origin tracking.
# #region DictionaryEntry [C:1] [TYPE Class]
class DictionaryEntry(Base):
__tablename__ = "dictionary_entries"
@@ -222,11 +213,10 @@ class DictionaryEntry(Base):
name="uq_dictionary_entry_term"
),
)
# [/DEF:DictionaryEntry:Class]
# #endregion DictionaryEntry
# [DEF:TranslationSchedule:Class]
# @PURPOSE: Defines a cron-based schedule for recurring translation jobs.
# #region TranslationSchedule [C:1] [TYPE Class]
class TranslationSchedule(Base):
__tablename__ = "translation_schedules"
@@ -240,11 +230,10 @@ class TranslationSchedule(Base):
created_by = Column(String, nullable=True)
created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc))
updated_at = Column(DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc))
# [/DEF:TranslationSchedule:Class]
# #endregion TranslationSchedule
# [DEF:TranslationJobDictionary:Class]
# @PURPOSE: Many-to-many association between translation jobs and terminology dictionaries.
# #region TranslationJobDictionary [C:1] [TYPE Class]
class TranslationJobDictionary(Base):
__tablename__ = "translation_job_dictionaries"
@@ -259,11 +248,10 @@ class TranslationJobDictionary(Base):
name="uq_job_dictionary"
),
)
# [/DEF:TranslationJobDictionary:Class]
# #endregion TranslationJobDictionary
# [DEF:MetricSnapshot:Class]
# @PURPOSE: Captures translation performance metrics at a point in time with config/content/dictionary hash keys for aggregation.
# #region MetricSnapshot [C:1] [TYPE Class]
class MetricSnapshot(Base):
__tablename__ = "translation_metric_snapshots"
@@ -290,6 +278,6 @@ class MetricSnapshot(Base):
__table_args__ = (
Index("ix_metric_snapshots_job_date", "job_id", "snapshot_date"),
)
# [/DEF:MetricSnapshot:Class]
# #endregion MetricSnapshot
# [/DEF:TranslateModels:Module]
# #endregion TranslateModels