Migration Intelligence 1.4.0
Migration Intelligence analysiert Migrationen zuerst, strukturiert fachliche Entscheidungen und lässt Residual-Änderungen nur zu, wenn ein eindeutiges Mapping vorliegt. English: Migration Intelligence
source→target-Mappings. Deshalb SAFE_REWRITE = 0.
v1.4.0 erfindet keine Rewrite-Ziele. Das ist Absicht — kein fehlendes Feature.
.velin/migration/intelligence/ nach
velinstyle migrate tailwind.
Status v1.4.0
Migration Intelligence ist dokumentarisch und technisch vorbereitet. Residual-Mappings besitzen derzeit
keine fachlich freigegebenen source→target-Paare. Deshalb:
| Fläche | Wert |
|---|---|
| Catalog Entries | 0 (catalogVersion: 0.0.0-empty) |
| Manifest Entries | 0 |
| SAFE_REWRITE | 0 |
| Apply-Kandidaten | 0 |
THEME_CATALOG_READY | 0 (16 Sources geprüft, 16 nicht freigegeben) |
PALETTE_CATALOG_READY | 0 (39 Sources geprüft, 39 nicht freigegeben) |
Das ist ein bewusstes Sicherheitsresultat — kein fehlender Implementierungsstatus. Schichten bleiben getrennt: Policy · Strategy · Acceptance · Catalog · Manifest · Apply.
Pipeline
Analysis (Classifier)
→ Groups
→ Decision Clusters
→ Policy
→ Strategy Blocks
→ User Actions
→ Acceptance (+ persistence)
→ Rewrite Catalog (fachlich)
→ Rewrite Manifest
→ Apply-Gate Preflight
→ Dry-Run
→ Apply (+ Snapshot / Rollback)
- Classifier / Groups: Residual-Tokens werden klassifiziert und für Review gruppiert
- Decision Cluster / Policy: bestehende Decision Policies an Residuals gebunden (keine erfundenen Targets)
- Strategy Blocks / User Actions: angereicherte Entscheidungsunterstützung (23 UA · 6 Blocks) — Enrichment ≠ Mapping
- Acceptance: speichert Strategie-Entscheidungen; schreibt nie Sources
- Catalog / Manifest / Apply: erst nach explizit freigegebenen Mappings
Harte Trennungen
| Aussage | Bedeutung |
|---|---|
| Analyse ≠ Acceptance | Reports erklären Residuals; Acceptance speichert Entscheidungen |
| Acceptance ≠ Mapping | Strategie-Optionen sind keine Token-Targets |
| Mapping ≠ Manifest | Catalog ist fachlich; Manifest ergänzt file/hash/occurrence |
| Manifest ≠ Apply | Apply braucht GATE_READY + DRY_RUN_OK |
| ACCEPTED ≠ APPLIED | applied bleibt false bis Apply Write erfolgreich ist |
| Enrichment ≠ Rewrite | Strategy Blocks spiegeln Policies; sie schreiben keine Sources um |
Pilot-Metriken (unverändert durch Intelligence)
| Metrik | Wert |
|---|---|
| User Actions | 23 (1 clear · 18 fachlich · 4 info) |
| Strategy Blocks | 6/6 enriched |
| Rewrite Catalog entries | 0 (0.0.0-empty) |
| Manifest entries | 0 |
| SAFE_REWRITE | 0 |
| Apply-Kandidaten | 0 |
| Coverage | 806 / 559 / 74 / 173 / 69.4% / 351 |
| Tests (Intelligence + migrate CLI) | 94 (41 intelligence · 53 cli-migrate) |
| Tests (+ release-sync) | 102 (+ 8 release-sync) |
Sechs Strategy Blocks
Alle Blocks sind aus bestehenden Decision Policies enriched. safeMappingExists ist für jeden Block false. Enrichment erzeugt keine Mappings.
THEME
- Policy:
POLICY_THEME_ROLE_MAP - Question: Welche VelinStyle Surface-/Text-Rollen entsprechen den vorhandenen Tailwind-Rollen?
- Options: A Velin Surface/Text/Border · B Projekt-CSS-Variablen behalten · C Gemischt nach Kontext
- Recommendation: A oder C — keine automatische Rollen-Zuordnung
- decisionStatus / confidence: REVIEW · CONDITIONAL
- p1Track: REQUIRES_P1_DESIGN ·
safeMappingExists: false - Kein Auto-Mapping: Role→Token-Tabelle fehlt; Kontext (page/card/sidebar) ist nicht 1:1
STATE
- Policy:
POLICY_STATE_INTERACTION - Question: Wie sollen Hover-/Focus-/Dark-State-Regeln abgebildet werden?
- Options: A Component CSS · B Komponenten-State (JS) · C Gemischt
- Recommendation: Eine Strategie wählen; keine Auto-Umsetzung
- decisionStatus / confidence: REVIEW · CONDITIONAL
- p1Track: NO_AUTOMATION ·
safeMappingExists: false - Kein Auto-Mapping: Keine State-Engine; hover/focus/dark bleiben auf P1 unresolved
HALF_STEP
- Policy:
POLICY_HALF_STEP - Question: P1-Policy oder Custom-CSS?
- Options: A P1/Compat Half-Step · B Manuelle Scale · C Belassen · D Gap akzeptieren
- Recommendation: A als P1-Track prüfen; bis dahin C/D — nichts automatisch
- decisionStatus / confidence: NEEDS_POLICY · CONDITIONAL
- p1Track: POSSIBLE_P1_POLICY ·
safeMappingExists: false - Kein Auto-Mapping: Catalog braucht P1-Policy; kein Half-Step-Rounding / nearest-token
PALETTE
- Policy:
POLICY_PALETTE_NO_TARGET - Question: Welche Zielrolle soll für diese Farben verwendet werden?
- Options: A Semantic Color · B Brand-CSS · C Solids vs Gradient-Stops getrennt
- Recommendation: Keine automatische Farbnäherung
- decisionStatus / confidence: REVIEW · CONDITIONAL
- p1Track: REQUIRES_P1_DESIGN ·
safeMappingExists: false - Kein Auto-Mapping: Keine per-color freigegebenen Targets; nearest-color verboten
DIM_PX
- Policy:
POLICY_ARB_FIXED_DIMENSION_PX - Question: Policy für feste px-Werte und md:/lg:-Varianten?
- Options: A Design-Token manuell · B Arbitrary belassen · C Layout umbauen
- Recommendation: Keine automatische Näherung auf Velin-Spacing
- decisionStatus / confidence: REVIEW · CONDITIONAL
- p1Track: REQUIRES_P1_DESIGN ·
safeMappingExists: false - Kein Auto-Mapping: Keine Scale-Tabelle; nearest-px verboten
TYPO
- Policy:
POLICY_ARB_TYPOGRAPHY_PX - Question: Fachliche Zielentscheidung für feste Fontgrößen?
- Options: A Typografie-Stufe manuell · B Projekt-CSS behalten
- Recommendation: Kein nearest-token Guessing
- decisionStatus / confidence: REVIEW · CONDITIONAL
- p1Track: NO_AUTOMATION ·
safeMappingExists: false - Kein Auto-Mapping: Kein
text-[10px]→velin-text-xs
Acceptance (Akzeptanz)
Store: .velin/migration/intelligence/acceptance.json · schemaVersion: 1
Acceptance speichert Entwicklerentscheidungen, aber keine Rewrite-Ziele. Statuswerte: OPEN · ACCEPTED · DEFERRED.
CLI: velinstyle migrate acceptance <project> --show · --ua …
| Feld | Rolle |
|---|---|
userActionId / actionKey | Stabile Resume-Keys |
selectedOptionId | Gewählte Strategie-Option (A/B/C…) |
status | OPEN · ACCEPTED · DEFERRED |
decisionStatus | Spiegelt Policy-Review (z. B. NEEDS_POLICY · REVIEW) |
acceptanceKind | z. B. CHOSE_OPTION |
decidedAt / user / note | Audit-Trail |
caseRefs / groupRefs | Verknüpfte Cases/Groups |
coverageSnapshot | Coverage zum Entscheidungszeitpunkt |
applied | Immer false, bis Apply Write erfolgreich ist |
Queue Drift / Orphans werden beim Laden gemeldet; Resume über userActionId, dann actionKey. Acceptance schreibt keine Sources um. ACCEPTED ≠ APPLIED.
Rewrite Catalog (fachlich)
catalogVersion: 0.0.0-emptyentries: 0- Keine Auto-Paare für Theme/State/Half-Step/Palette/Dim/Typo
- THEME Freigabe: 16 Sources · 16 nicht freigegeben ·
THEME_CATALOG_READY = 0 - PALETTE Freigabe: 39 Sources · 39 nicht freigegeben ·
PALETTE_CATALOG_READY = 0 - Catalog allein erhöht nicht SAFE_REWRITE
Rewrite Manifest
Separate Datei: rewrite-manifest.json (nicht Acceptance). Pilot: 0 produktive Entries.
- Felder:
sourceToken,targetToken,mappingSource,file,fileContentHash(SHA-256),occurrence,applied mappingSource-Allowlist:EXPLICIT_DEVELOPER_MAPPING·P1_CATALOG_MAPPING·CONTROLLED_CATALOG_MAPPING- Verboten: HEURISTIC · NEAREST_TOKEN · SEMANTIC_GUESS · AI_GUESS · AUTO_INFERENCE
- Target-Allowlist /
velin--Prefix · Path/realpath-Containment - Acceptance↔Manifest-Abgleich; Acceptance erfindet keine Targets
- CLI:
rewrite-manifest --show|--validate|--init|--add
Apply-Gate → Dry-Run → Apply
Load → Validate → Acceptance → Path → Target → MappingSource
→ Hash → TOCTOU → Conflict → Occurrence → Snapshot-Preflight
→ GATE_READY
Then:
Dry-Run → re-check Gate → Snapshot → TOCTOU → Write
→ Rollback on failure → applied:true only after success
- Scope heute: nur
file-global-exact(position-exactblockiert) - GATE_READY ≠ SAFE_REWRITE
- Ohne freigegebene Mappings ist Apply nicht produktiv lauffähig
velinstyle migrate acceptance ./my-project --show
velinstyle migrate rewrite-manifest ./my-project --preflight
velinstyle migrate rewrite-manifest ./my-project --dry-run
# --apply only with GATE_READY + DRY_RUN_OK and explicit mappingsBewusste Nicht-Ziele in 1.4.0
- Keine heuristischen Residual-Rewrite-Mappings
- Kein nearest-token / nearest-color / px-Rundung / Half-Step-Rounding über Intelligence
- Keine automatischen Theme-/State-/Palette-/Typo-/Dim-Targets
- Keine 4A-/4C-/4H-Apply-Automation
- Intelligence ändert die P1-Coverage nicht
- P1/P2 bleiben unverändert / Freeze
Spätere Versionen
Erst nach expliziter Design/Dev-Catalog-Zeile: Manifest --add → Preflight → Dry-Run-Review → Apply.
Historische Phase-Dokumente beschreiben den jeweiligen Entwicklungsstand und wurden nachträglich nicht umgeschrieben.